obj = null; // подходит только для ссылочных типов или
obj =0; // подходит только для числовых типов и // перечислений, но не для структур
следует выбрать? Для разрешения этой дилеммы можно воспользоваться еще одной формой оператора default, приведенной ниже.
default
Эта форма оператора default пригодна для всех аргументов типа, будь то типы значений или ссылочные типы.
Ниже приведен короткий пример, демонстрирующий данную форму оператора
default.
// Продемонстрировать форму оператора default.
using System;
class MyClass {
//...
}
// Получить значение, присваиваемое параметру типа Т по умолчанию, class Test<T> { public Т obj;
public Test() {
// Следующий оператор годится только для ссылочных типов.
// obj = null; //не годится
// Следующий оператор годится только для типов значений.
// obj = 0; // не годится
// так и для типов значений, obj = default(Т); // Годится!
}
}
class DefaultDemo { static void Main() {
// Сконструировать объект класса Test, используя ссылочный тип.
Test<MyClass> х = new Test<MyClass> () ; 11
if(x.obj == null)
Console.WriteLine('Переменная x.obj имеет пустое значение <null>.');
// Сконструировать объект класса Test, используя тип значения.
Test<int> у = new Test<int>();
if(у.obj == 0)
Console.WriteLine('Переменная у.obj имеет значение 0.');
}
}
Вот к какому результату приводит выполнение этого кода.
Переменная x.obj имеет пустое значение <null>.
Переменная у.obj имеет значение 0.
Обобщенные структуры
В C# разрешается создавать обобщенные структуры. Синтаксис для них такой же, как и для обобщенных классов. В качестве примера ниже приведена программа, в которой создается обобщенная структура XY для хранения координат X, Y.
// Продемонстрировать применение обобщенной структуры, using System;
// Эта структура является обобщенной, struct XY<T> {
Т х;
Т у;
public XY(Т а, Т Ь) { х = а;
У = Ь;
}
