Класс objectкак универсальный тип данных

Если 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] + " ");

}

}

Как показывает данный пример, по ссылке на объект класса object можно обращаться к данным любого типа, поскольку в переменной ссылочного типа object допускается хранить ссылку на данные всех остальных типов. Следовательно, в массиве типа object из рассматриваемого здесь примера можно сохранить данные практически любого типа. В развитие этой идеи можно было бы, например, без особого труда создать класс стека со ссылками на объекты класса object. Это позволило бы хранить в стеке данные любого типа.

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

ГЛАВА

Интерфейсы, структуры

И перечисления