«Цепочка конструктора» - это подход, при котором конструктор вызывает другой конструктор в том же классе.Это особенно полезно, когда у нас есть класс, который определяет несколько конструкторов.Например, мы создаем класс с именем Person в примере ниже.У нас также есть три поля, которые мы можем использовать;Возраст, имя и цвет волос.Этот класс имеет три конструктора.Если бы мы не использовали подход «Конструктора цепочки», код был бы примерно таким:
Не используется цепочка конструктора:
public class Person
{
private int Age;
private string Name;
private string HairColour;
public Person(int theAge)
{
Age = theAge;
}
public Person(int theAge, string theName)
{
Age = theAge;
Name = theName;
}
public Person(int theAge, string theName, string theHairColour)
{
Age = theAge;
Name = theName;
HairColour = theHairColour;
}
}
Как вы можете видетьв каждом конструкторе мы присваиваем значение Age, что дублирует код.Мы также присвоили значение Name в двух из конструкторов, так что опять больше дублирования.Чтобы устранить эту проблему, мы можем присвоить все значения Age, Name и HairColour в конструкторе с большинством параметров.Затем мы можем вызвать этот конструктор при вызове двух других конструкторов.Посмотрите код ниже, чтобы увидеть этот подход «Цепочка».
Использование конструктора Цепочка:
public class Person
{
private int Age;
private string Name;
private string HairColour;
public Person(int theAge):this(theAge, "", "")
{
//One parameter
}
public Person(int theAge, string theName):this(theAge, theName, "")
{
//Two Parameters
}
public Person(int theAge, string theName, string theHairColour)
{
//Three parameters
Age = theAge;
Name = theName;
HairColour = theHairColour;
}
}
Надеюсь, что это помогает - это экономит на дублировании.
Здесь показан более «экстремальный» пример с большим количеством полей (и таким образом большим количеством потенциальных дубликатов):
Пример, в котором он определенно сэкономит на дублировании