Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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.
- Default connections
- Setting up default policies
- 2. Пример создания базового отношения в записи на псевдокоде
- Часть I Слово
- Как избежать разрыва словосочетаний в Word?
- Нет изображения при воспроизведении видео или появляется сообщение об ошибке загрузки кодека
- 11.1. А кодеков-то нет!
- Booting into the Default Runlevel
- Booting to a Nondefault Runlevel with GRUB
- Теперь посмотрим, как выглядит TITLE в исходном коде
- Есть ли в коде волшебные числа[141]?
- mode and default