}
public XYCoord(int i, int j) {
Console.WriteLine('В конструкторе XYCoord(int, int)'); x = i;
У = j;
}
}
class OverloadConsDemo { static void Main() {
XYCoord tl = new XYCoord();
XYCoord t2 = new XYCoord(8, 9);
XYCoord t3 = new XYCoord(t2);
Console.WriteLine('tl.x,
tl.y:
' +
tl.x
+
' +
tl.y);
Console.WriteLine('t2.x,
t2. у:
' +
t2 .x
+ ',
' +
t2.y);
Console.WriteLine ('t3.x,
t3.y:
' +
t3. x
+ ',
' +
t3.y);
}
}
Выполнение этого кода приводит к следующему результату.
В конструкторе XYCoord(int, int)
В конструкторе XYCoord()
В конструкторе XYCoord(int, int)
В конструкторе XYCoord(int, int)
В конструкторе XYCoord(obj)
tl.x, tl.y: 0, 0 t2 . x, t2 . у: 8, 9 t3.x, t3.у: 8, 9
Код в приведенном выше примере работает следующим образом. Единственным конструктором, фактически инициализирующим поля х и у в классе XYCoord, является конструктор XYCoord(int, int).А два других конструктора просто вызывают этот конструктор с помощью ключевого слова this. Например, когда создается объект
11, то вызывается его конструктор XYCoord (), что приводит к вызову this (0, 0) ,
который в данном случае преобразуется в вызов конструктора XYCoord (0, 0). То же самое происходит и при создании объекта t2.
Вызывать перегружаемый конструктор с помощью ключевого слова this полезно, в частности, потому, что он позволяет исключить ненужное дублирование кода. В приведенном выше примере нет никакой необходимости дублировать во всех трех конструкторах одну и ту же последовательность инициализации, и благодаря применению ключевого слова this такое дублирование исключается. Другое преимущество организации подобного вызова перезагружаемого конструктора заключается в возможности создавать конструкторы с задаваемыми 'по умолчанию' аргументами, когда эти аргументы не указаны явно. Ниже приведен пример создания еще одного конструктора XYCoord.
public XYCoord(int х) : this(х, х) { }
По умолчанию в этом конструкторе для координаты у автоматически устанавливается то же значение, что и для координаты у. Конечно, пользоваться такими конструкциями с задаваемыми 'по умолчанию' аргументами следует благоразумно и осторожно, чтобы не ввести в заблуждение пользователей классов.
Инициализаторы объектов
Обратимся сначала к простому примеру.
// Простой пример, демонстрирующий применение инициализаторов объектов.
using System;
class MyClass { public int Count; public string Str;
