Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Ключевое слово default в обобщенном программном коде

Ключевое слово default в обобщенном программном коде

Как ведите, Point‹T› использует параметр типа в определении полей данных, аргументов конструктора и в определениях свойств. Обратите внимание на то, что вдобавок к переопределению ToString() обобщенный тип Point‹T› определяет метод ResetPoint(), в котором используется новый синтаксис.

// Ключевое слово 'default' в C# 2005 является перегруженным.
// При использовании с обобщениями оно представляет значение
// параметра типа, принимаемое по умолчанию.
public void ResetPoint() {
 xPos = default(Т);
 yPos = default(T);
}

В C# 2005 ключевое слово default получило два значения. Кроме использования в конструкции switch, оно может использоваться для установки параметрам типа значений, принятых по умолчанию. И это, очевидно, полезно, поскольку обобщенный тип ничего заранее не знает о фактических замещающих значениях и поэтому не может с безопасностью предполагать о том. каким должно быть значение по умолчанию. Значения по умолчанию для параметра типа являются следующими.

• Для числовых значений значением по умолчанию является 0.

• Для ссылочных типов значением по умолчанию является null.

• Поля структуры устанавливаются равными 0 (для типов, характеризуемых значениями) или null (для ссылочных типов).

Для Point‹T› вы можете непосредственно установить xPos и yPos равными 0, поскольку вполне безопасно предполагать, что вызывающая сторона будет поставлять только числовые данные. Однако с помощью синтаксиса default(T) вы можете сделать обобщенный тип более гибким. В любом случае вы теперь можете использовать методы Point‹T› так.

static void Main(string[] args) {
 Console.WriteLine("***** Забавы с обобщениями *****n");
 // Point с использованием int.
 Point‹int› p = new Point‹int›(10, 10);
 Console.WriteLine("p.ToString()={0}", p.ToString());
 p.ResetPoint();
 Console.WriteLine("p.ToString()={0}", p.ToString());
 Console.WriteLine();
 // Point с использованием double.
 Point‹double› p2 = new Point‹double›(5.4, 3.3);
 Console.WriteLine("p2.ToString()={0}", p2.ToString());
 p2.ResetPoint();
 Console.WriteLine("p2.ToString()={0}", p2.ToString());
 Console.WriteLine();
 // Обмен двух Point.
 Point‹int› pointA = new Point‹int›(50, 40);
 Point‹int› pointB = new Point‹int›(543, 1);
 Console.WriteLine("До обмена: {0}, {1}", pointA, pointB);
 Swap‹Point‹int> >(ref pointA, ref pointB);
 Console.WriteLine("После обмена: {0}, {1}", pointA, pointB);
 Console.ReadLine();
}

Соответствующий вывод показан на рис. 10.2.


Рис. 10.2. Использование обобщённого типа Point

Исходный код. Проект SimpleGenerics размещен в подкаталоге, соответствующем главе 10.

Оглавление книги


Генерация: 1.703. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз