Книга: C# для профессионалов. Том II
Переопределение метода
Переопределение метода
Переопределенная версия метода GetMonthlyPayment()
является достаточно простой. Отметим, что она помечена ключевым словом override
для сообщения компилятору, что мы переопределяем метод базового класса, как это делалось с методом Employee.ToString()
:
public override decimal GetMonthlyPayment() {
return base.GetMonthlyPayment() + bonus/12;
}
Переопределенная версия содержит также вызов версии этого метода из базового класса. При этом используется новое ключевое слово base
, base
действует таким же образом, как и this
, за исключением того, что оно специально указывает, что надо использовать метод или свойство и т.д. из определения базового класса. При желании можно альтернативно реализовать переопределенную версию метода GetMonthlyPayment()
следующим образом:
public override decimal GetMonthlyPayment() {
return (Salary + bonus)/12;
}
но, чтобы показать использование ключевого слова base
, был выбран другой вариант. В связи с этим есть одно действие, которое мы не смогли бы сделать:
public override decimal GetMonthlyPayment() {
return (salary + bonus)/12; // неправильно
}
Код выглядит почти так же, как предыдущая версия, кроме того, что поле salary
используется непосредственно, а не через свойство Salary
. Можно предположить, что это более эффективное решение, поскольку фактически убирается вызов метода. Но компилятор будет инициировать ошибку, так как поле salary
объявлялось как private
(закрытое). Этот означает, что ничему вне класса Employee
не разрешается видеть это поле. Даже производные классы не знают о закрытых полях базового класса.
Если необходимо, чтобы производные, но не связанные классы могли видеть поле, C# предоставит альтернативный уровень защиты protected
(защищенный):
protected decimal salary; // можно сделать так
Если член класса объявлен как защищенный, то он виден только в этом классе и в производных классах. Однако обычно строго рекомендуется сохранять все поля закрытыми (private
) по той же причине, по которой требуется сохранять переменные закрытыми в модулях классов VB. Дело в том, что при сокрытии реализации класса (или модуля класса) облегчается выполнение будущего обслуживания этого класса. Обычно модификатор protected
используется для свойств и методов, которые предназначены только для того, чтобы разрешать производным классам получать доступ к свойствам определения базового класса.
- Виртуальные методы и их переопределение
- Переопределение виртуальных методов в обобщенном классе
- Переопределение свойства Actionlnvoker
- Переопределение методов
- Пример применения метода «пять почему»
- Два метода рекламы. И жизни
- Переопределение System.Object.GetHashCode()
- 2.5.1. Основные положения метода структурного проектирования
- 10.1.16. Применение метода readpartial
- Приложение 1 Три метода увеличения ctr в высококонкурентных тематиках
- Ограничения метода отображения файлов
- Пример: последовательная обработка файлов с использованием метода отображения