Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Класс object как универсальный тип данных C# Полное руководство Герберт Шилдт

Класс object как универсальный тип данных C# Полное руководство Герберт Шилдт

Если object является базовым классом для всех остальных типов и упаковка значений простых типов происходит автоматически, то класс object можно вполне использовать в качестве “универсального” типа данных. Для примера рассмотрим программу, в которой сначала создается массив типа object, элементам которого затем присваиваются значения различных типов данных:

// Использовать класс object для создания массива "обобщенного" типа.

using System;

class GenericDemo {
   static void Main() {
      object [ ] ga = new object [10];

      // Сохранить целые значения.
      for (int i=0; i < 3; i++)
         ga [i] = i;

      // Сохранить значения типа double.
      for (int i=3; i < 6; i++)
      ga[i] = (double) i / 2;

      // Сохранить две строки, а также значения типа bool и char.
      ga[6] = "Привет";
      ga[7] = true;
      ga[8] = 'X';
      ga[9] = "Конец";

      for(int i = 0; i < ga.Length; i++)
      Console.WriteLine("ga[" + i + "]:"+ ga[i] +"") ;
   }
}


Выполнение этой программы приводит к следующему результату:
   да[0] : 0
   да[1]: 1
   да[2]: 2
   да[3]: 1.5
   да[4]: 2
   да[5]: 2.5
   да[6]: Привет
   да[7]: True
   да[8] : X
   да[9] : Конец

Как показывает данный пример, по ссылке на объект класса object можно обращаться к данным любого типа, поскольку в переменной ссылочного типа object допускается хранить ссылку на данные всех остальных типов. Следовательно, в массиве типа obj ect из рассматриваемого здесь примера можно сохранить данные практически любого типа. В развитие этой идеи можно было бы, например, без особого труда создать класс стека со ссылками на объекты класса object. Это позволило бы хранить в стеке данные любого типа.
Несмотря на то что универсальный характер класса object может быть довольно эффективно использован в некоторых ситуациях, было бы ошибкой думать, что с помощью этого класса стоит пытаться обойти строго соблюдаемый в C# контроль типов. Вообще говоря, целое значение следует хранить в переменной типа int, строку — в переменной ссылочного типа string и т.д.
А самое главное, что начиная с версии 2.0 для программирования на C# стали доступными подлинно обобщенные типы данных — обобщения (более подробно они рассматриваются в главе 18). Внедрение обобщений позволило без труда определять классы и алгоритмы, автоматически обрабатывающие данные разных типов, соблюдая типовую безопасность. Благодаря обобщениям отпала необходимость пользоваться классом object как универсальным типом данных при создании нового кода. Универсальный характер этого класса лучше теперь оставить для применения в особых случаях.