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

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

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

public sealed class DataTableCollection : InternalDataCollectionBase

{

...

  // Перегруженные индексаторы.

  public DataTable this[int index] { get; }

  public DataTable this[string name] { get; }

  public DataTable this[string name, string tableNamespace] { get; }

}

Поддержка индексаторных методов вполне обычна для типов в библиотеках базовых классов. Поэтому даже если текущий проект не требует построения специальных индексаторов для классов и структур, помните о том, что многие типы уже поддерживают такой синтаксис.

Многомерные индексаторы

Допускается также создавать индексаторный метод, который принимает несколько параметров. Предположим, что есть специальная коллекция, хранящая элементы в двумерном массиве. В таком случае индексаторный метод можно определить следующим образом:

public class SomeContainer

{

  private int[,] my2DintArray = new int[10, 10];

  public int this[int row, int column]

  {  /* получить или установить значение в двумерном массиве */  }

}

Если только вы не строите высокоспециализированный класс коллекций, то вряд ли будете особо нуждаться в создании многомерного индексатора. Пример ADO.NET еще раз демонстрирует, насколько полезной может оказаться такая конструкция. Класс DataTable в ADO.NET по существу представляет собой коллекцию строк и столбцов, похожую на миллиметровку или на общую структуру электронной таблицы Microsoft Excel.

Хотя объекты DataTable обычно наполняются без вашего участия с использованием связанного "адаптера данных", в приведенном ниже коде показано, как вручную создать находящийся в памяти объект DataTable, который содержит три столбца (для имени, фамилии и возраста каждой записи). Обратите внимание на то, как после добавления одной строки в DataTable с помощью многомерного индексатора производится обращение ко всем столбцам первой (и единственной) строки. (Если вы собираетесь следовать примеру, тогда импортируйте в файл кода пространство имен System.Data.)

static void MultiIndexerWithDataTable()

{

  // Создать простой объект DataTable с тремя столбцами.

  DataTable myTable = new DataTable();

  myTable.Columns.Add(new DataColumn("FirstName"));

   myTable.Columns.Add(new DataColumn("LastName"));

  myTable.Columns.Add(new DataColumn("Age"));

  // Добавить строку в таблицу.

  myTable.Rows.Add("Mel", "Appleby", 60);

  // Использовать многомерный индексатор для вывода деталей первой строки.

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

  Console.WriteLine("First Name: {0}", myTable.Rows[0][0]);

  Console.WriteLine("Last Name: {0}", myTable.Rows[0][1]);

  Console.WriteLine("Age : {0}", myTable.Rows[0][2]);

}

Начиная с главы 21, мы продолжим рассмотрение ADO.NET, так что не переживайте, если что-то в приведенном выше коде выглядит незнакомым. Пример просто иллюстрирует, что индексаторные методы способны поддерживать множество измерений, а при правильном применении могут упростить взаимодействие с объектами, содержащимися в специальных коллекциях.

Определения индексаторов в интерфейсных типах

 Индексаторы могут определяться в выбранном типе интерфейса .NET Core, чтобы позволить поддерживающим типам предоставлять специальные реализации. Ниже показан простой пример интерфейса, который задает протокол для получения строковых объектов с использованием числового индексатора:

public interface IStringContainer

{

  string this[int index] { get; set; }

}

При таком определении интерфейса любой класс или структура, которые его реализуют, должны поддерживать индексатор с чтением/записью, манипулирующий элементами с применением числового значения. Вот частичная реализация класса подобного вида:

class SomeClass : IStringContainer

{

  private List<string> myStrings = new List<string>();

  public string this[int index]

  {

    get => myStrings[index];

    set => myStrings.Insert(index, value);

  }

}

На этом первая крупная тема настоящей главы завершена. А теперь давайте перейдем к исследованиям языкового средства, которое позволяет строить специальные классы и структуры, уникальным образом реагирующие на внутренние операции С#. Итак, займемся концепцией перегрузки операций.

Понятие перегрузки операций

Как и любой язык программирования, C# имеет заготовленный набор лексем, используемых для выполнения базовых операций над встроенными типами. Например, вы знаете, что операция + может применяться к двум целым числам, чтобы получить большее целое число:

// Операция + с целыми числами.

int a = 100;

int b = 240;

int c = <b>a + b</b>; //  с теперь имеет значение 340

Опять-таки, здесь нет ничего нового, но задумывались ли вы когда-нибудь о том, что одну и ту же операцию + разрешено использовать с большинством встроенных типов данных С#? Скажем, взгляните на следующий код:

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

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

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


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*