Как работают конструкторы в C# и можно ли их перегружать?
Не до конца понимаю конструкторы. Это метод без типа возврата с именем класса? Можно ли сделать несколько конструкторов и как вызвать один из другого?
class User
{
public string Name;
public User(string name) { Name = name; }
}
2 ответа
Да, конструктор — это специальный метод, который вызывается при создании объекта через new. У него имя совпадает с классом и нет типа возврата. Его задача — привести объект в корректное начальное состояние.
Можно объявить несколько конструкторов (перегрузка) с разным набором параметров:
class User
{
public string Name;
public int Age;
public User(string name)
{
Name = name;
Age = 18; // значение по умолчанию
}
public User(string name, int age)
{
Name = name;
Age = age;
}
}
var u1 = new User("Аня");
var u2 = new User("Борис", 30);
Чтобы не дублировать код, один конструктор можно вызвать из другого через : this(...):
class User
{
public string Name;
public int Age;
public User(string name) : this(name, 18) { }
public User(string name, int age)
{
Name = name;
Age = age;
}
}
Если не написать ни одного конструктора, компилятор создаст пустой конструктор по умолчанию. Но как только вы объявили хотя бы один свой, бесплатный конструктор без параметров исчезает — его придётся добавить вручную, если он нужен.
Дополню про вызов конструктора базового класса через : base(...) при наследовании:
class Person
{
public string Name;
public Person(string name) { Name = name; }
}
class Employee : Person
{
public decimal Salary;
public Employee(string name, decimal salary) : base(name)
{
Salary = salary;
}
}
Здесь base(name) сначала вызывает конструктор Person, а потом выполняется тело конструктора Employee. Это обязательно, если у базового класса нет конструктора без параметров.