Книга: C# для профессионалов. Том II
Конструктор Employee
Конструктор Employee
После объявления полей в приведенном выше коде располагается "метод", имя которого — Employee
, совпадает с именем класса, то есть перед нами находится конструктор. Однако этот конструктор получает параметры и делает то же самое, что и метод Create
в версии VB — он использует параметры для инициализации полей-членов:
public Employee(string name, decimal salary) {
this.name = name;
this.salary = salary;
}
Существует потенциальная синтаксическая проблема, так как явные имена параметров совпадают с именами полей — name
и salary
. Но она разрешается с помощью использования ссылки this
, помечающей поля. Можно было бы вместо этого дать параметрам другие имена, но способ, которым это было сделано, является достаточно ясным и означает, что параметры сохраняют очевидные простые имена, которые соответствуют их значениям. Это обычный способ действий для C# в таких ситуациях.
Теперь можно объяснить точное значение квалификатора readonly
перед именем поля:
private readonly string name;
Если поле помечено как readonly
, то единственным местом, где ему может быть присвоено значение, является конструктор класса. Компилятор будет инициировать ошибку, если встретит код, который попытается изменить значение переменной readonly
, в любом месте, кроме конструктора. Это предоставляет надежную гарантию, что переменная не будет изменена, если она была задана. Невозможно сделать что-либо подобное в VB, так как VB не имеет конструкторов, которые получают параметры, поэтому переменные уровня класса в VB должны быть инициализированы с помощью методов или свойств, вызываемых после создания экземпляра объекта.
Между прочим этот конструктор не просто позволяет задать параметры для инициализации объекта Employee
— он заставляет это сделать. Если написать код следующего вида:
Employee Britney = new Employee; // неправильно
то он на самом деле не откомпилируется. Компилятор будет инициировать ошибку, так как в C# должен всегда вызываться конструктор, когда создается новый объект. Но никаких параметров задано не было, а единственный доступный конструктор требует двух параметров. Поэтому просто невозможно создать объект Employee
без каких-либо параметров. Это страхует от ошибок, вызываемых неинициализированными объектами Employee
.
Можно задать в классе более одного конструктора, чтобы выбрать, какое множество желательно использовать при создании нового объекта этого класса. Мы увидим, как это делается позже в данном приложении. Однако для этого конкретного класса единственного конструктора вполне достаточно.
- Пример: Employees и Managers
- Передача вызовов конструктора с помощью this
- 9.2. Классы и конструкторы
- Класс Employee в C#
- Свойства класса Employee
- Модуль класса Employee в VB
- Часть III Конструктор речевых модулей для скриптов и стандартов продаж Изменения в продажах и требования к речевым модул...
- Перегрузка конструкторов
- Работа с конструктором запросов
- 9.5.3. Имя конструктора
- Конструкторы
- 1.5.1. Работа с конструкторской библиотекой