Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Передача вызовов конструктора с помощью this
Передача вызовов конструктора с помощью this
Другим вариантом использования ключевого слова this является такая реализация вызова одним конструктором другого, при которой не возникает избыточной логики инициализации члена. Рассмотрим следующую модификацию класса Employee.
public class Employee {
…
public Employee(string fullName, int empID, float currPay) {
this.fullName = fullName;
this.empID = empID;
this.currPay = currPay;
}
// Если пользователь вызовет этот конструктор, то
// передать вызов версии с тремя аргументами.
public Employee(string fullName) : this(fullName, IDGenerator.GetNewEmpID(), 0.0F) {}
…
}
Эта итерация класса Employee определяет два пользовательских конструктора, и второй из них имеет единственный параметр (имя индивидуума). Однако для построения полноценного нового Employee вы хотите гарантировать наличие соответствующего ID и значения зарплаты. Предположим, что у вас есть пользовательский класс (IDGenerator) со статическим методом GetNewEmpID(), тем или иным образом генерирующим ID нового работника. Собрав множество начальных параметров, вы передаете запрос создания объекта конструктору с тремя аргументами.
Если не передавать вызов, то придется добавить в каждый конструктор избыточный программный код.
// currPay автоматически приравнивается к 0.0F через значения,
// заданные по умолчанию.
public Employee(string fullName) {
this.fullName = fullName;
this.empID = IDGenerator.GetNewEmpID();
}
Следует понимать, что использование ключевого слова this для передачи вызовов конструктора не является обязательным. Однако при использовании этого подхода вы получаете более удобное и более краткое определение класса. Фактически, используя этот подход, вы можете упростить свои программистские задачи, поскольку реальная работа делегируется одному конструктору (обычно это конструктор, который имеет наибольшее число параметров), а остальные конструкторы просто перекладывают ответственность.
- Тип класса в C#
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- Передача прав
- Conventions used in this document
- Why this document was written
- Terms used in this document
- 10. FUTURE REVISIONS OF THIS LICENSE
- How to use this License for your documents
- Обработка запросов с помощью PHP
- 6.4.2. Передача номенклатурных позиций между ячейками склада