На самом деле, когда мы создаём экземпляр класса, мы вызываем специальный метод, отвечающий за его конструирование экземпляра в памяти. Данный вид методов получили особое название – конструкторы класса.
Конструктор класса (constructor, иногда сокращают ctor
) — специальный блок инструкций, вызываемый при создании объекта.
По логике метод, выступающий в роли конструктора, должен иметь возвращаемое значение типа своего же класса и иметь имя идентичное имени классу из этого следует, что, например, для класса MyClass, конструктор должен будет выглядеть следующим образом:
public MyClass MyClass() {}
разработчики языка C# решили, что дважды писать имя класса в конструкторе не нужно, достаточно будет и одного раза. Поэтому все конструктора в классах выглядят следующим образом:
public «имя класса где находится конструктор»() {}
например:
public MyClass() {}
Конструктор по умолчанию – это конструктор, который не принимает параметров.
Пользовательский конструктор – это конструктор принимающий
Задача конструктора по умолчанию – инициализация полей значениями по умолчанию.
Задача пользовательского конструктора – инициализация полей предопределенными пользователем значениями.
Если в теле класса не определен явно ни один конструктор, то всегда используется «невидимый» конструктор по умолчанию.
Если в классе имеется пользовательский конструктор, и при этом требуется создавать экземпляры класса с использованием конструктора по умолчанию, то конструктор по умолчанию должен быть определен в теле класса явно, иначе возникнет ошибка на уровне компиляции.
Для вызова пользовательского конструктора нужно при создании экземпляра класса в аргументных скобки передать соответствующие параметры:
Примечание: Имя конструктора всегда совпадает с именем класса. Для создания конструктора в Visual Studio можно использовать snippet ctor
.
Рекомендации:
- всегда создавайте явно конструктор по умолчанию.
- используйте то же самое название для параметров конструктора и поля или свойства, если параметры конструктора используются для того чтобы инициализировать поле или установить свойство.
Примечание: когда имя параметра метода и имя поля класса совпадают, при попытке обращении к полю (написав только имя) в методе компилятор воспримет такое обращение не к полю, а к локальной переменной метода. Что бы указать, что нужно обратиться к полю нужно использовать ключевое слово this
и через точку указать имя поля (например, this.name
). Ключевое слово this
говорит компилятору, что будет происходить обращение к себе же (к члену класса в котором оно используется).