Книга: 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.

Можно задать в классе более одного конструктора, чтобы выбрать, какое множество желательно использовать при создании нового объекта этого класса. Мы увидим, как это делается позже в данном приложении. Однако для этого конкретного класса единственного конструктора вполне достаточно.

Оглавление книги


Генерация: 0.312. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз