» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

На нашем литературном портале можно бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю, Троелсен Эндрю . Жанр: Базы данных. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Название: Язык программирования C#9 и платформа .NET5
Дата добавления: 22 август 2024
Количество просмотров: 228
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

Язык программирования C#9 и платформа .NET5 читать книгу онлайн

Язык программирования C#9 и платформа .NET5 - читать бесплатно онлайн , автор Троелсен Эндрю

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.

Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.

Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

Перейти на страницу:

Затем будут обсуждаться темы, которые особенно полезны при работе с API-интерфейсами LINQ (хотя они применимы и за рамками контекста LINQ): расширяющие методы и анонимные типы.

В завершение главы вы узнаете, каким образом создавать контекст "небезопасного" кода, чтобы напрямую манипулировать неуправляемыми указателями. Хотя использование указателей в приложениях C# — довольно редкое явление, понимание того, как это делается, может пригодиться в определенных обстоятельствах, связанных со сложными сценариями взаимодействия.

Понятие индексаторных методов

Программистам хорошо знаком процесс доступа к индивидуальным элементам, содержащимся внутри простого массива, с применением операции индекса ([]). Вот пример:

// Организовать цикл по аргументам командной строки

// с использованием операции индекса.

for(int i = 0; i < args.Length; i++)

{

  Console.WriteLine("Args: {0}", args[i]);

}

// Объявить массив локальных целочисленных значений.

int[] myInts = { 10, 9, 100, 432, 9874};

// Применить операцию индекса для доступа к каждому элементу.

for(int j = 0; j < myInts.Length; j++)

{

  Console.WriteLine("Index {0}  = {1} ", j,  myInts[j]);

}

Console.ReadLine();

Приведенный код ни в коем случае не является чем-то совершенно новым. Но в языке C# предлагается возможность проектирования специальных классов и структур, которые могут индексироваться подобно стандартному массиву, за счет определения индексаторного метода.Такое языковое средство наиболее полезно при создании специальных классов коллекций (обобщенных или необобщенных).

Прежде чем выяснять, каким образом реализуется специальный индексатор, давайте начнем с того, что  продемонстрируем его в действии. Пусть к специальному типу PersonCollection, разработанному в главе 10 (в проекте IssuesWithNonGenericCollections), добавлена поддержка индексаторного метода. Хотя сам индексатор пока не добавлен, давайте посмотрим, как он используется внутри нового проекта консольного приложения по имени SimpleIndexer:

using System;

using System.Collections.Generic;

using System.Data;

using SimpleIndexer;

// Индексаторы позволяют обращаться к элементам в стиле массива.

Console.WriteLine("***** Fun with Indexers *****n");

PersonCollection myPeople = new PersonCollection();

<b>// Добавить объекты с применением синтаксиса индексатора.</b>

myPeople[0] = new Person(&quot;Homer&quot;, &quot;Simpson&quot;, 40);

myPeople[1] = new Person(&quot;Marge&quot;, &quot;Simpson&quot;, 38);

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

myPeople[2] = new Person(&quot;Lisa&quot;, &quot;Simpson&quot;, 9);

myPeople[3] = new Person(&quot;Bart&quot;, &quot;Simpson&quot;, 7);

myPeople[4] = new Person(&quot;Maggie&quot;, &quot;Simpson&quot;, 2);

<b>// Получить и отобразить элементы, используя индексатор.</b>

for (int i = 0; i &lt; myPeople.Count; i++)

{

  Console.WriteLine(&quot;Person number: {0}&quot;, i);  // номер лица

  Console.WriteLine(&quot;Name: {0} {1}&quot;,

    myPeople[i].FirstName, myPeople[i].LastName);  // имя и фамилия

  Console.WriteLine(&quot;Age: {0}&quot;, myPeople[i].Age);  // возраст

  Console.WriteLine();

}

Как видите, индексаторы позволяют манипулировать внутренней коллекцией подобъектов подобно стандартному массиву. Но тут возникает серьезный вопрос: каким образом сконфигурировать класс PersonCollection (или любой другой класс либо структуру) для поддержки такой функциональности? Индексатор представлен как слегка видоизмененное определение свойства С#. В своей простейшей форме индексатор создается с применением синтаксиса this[]. Ниже показано необходимое обновление класса PersonCollection:

using System.Collections;

namespace SimpleIndexer

{

  // Добавить индексатор к существующему определению класса.

  public class PersonCollection : IEnumerable

  {

    private ArrayList arPeople = new ArrayList();

    ...

    // Специальный индексатор для этого класса.

    public Person this[int index]

    {

      get =&gt; (Person)arPeople[index];

      set =&gt; arPeople.Insert(index, value);

    }

  }

}

Если не считать факт использования ключевого слова this с квадратными скобками, то индексатор похож на объявление любого другого свойства С#. Например, роль области get заключается в возвращении корректного объекта вызывающему коду. Здесь мы достигаем цели делегированием запроса к индексатору объекта ArrayList, т.к. данный класс также поддерживает индексатор. Область set контролирует добавление новых объектов Person, что достигается вызовом метода Insert() объекта ArrayList.

Перейти на страницу:
Комментариев (0)