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