Книга: C# 4.0: полное руководство
Предотвращение наследования с помощью ключевого слова sealed
Предотвращение наследования с помощью ключевого слова sealed
Несмотря на всю эффективность и полезность наследования, иногда возникает потребность предотвратить его. Допустим, что имеется класс, инкапсулирующий последовательность инициализации некоторого специального оборудования, например медицинского монитора. В этом случае требуется, чтобы пользователи данного класса не могли изменять порядок инициализации монитора, чтобы исключить его неправильную настройку. Но независимо от конкретных причин в C# имеется возможность предотвратить наследование класса с помощью ключевого слова sealed
.
Для того чтобы предотвратить наследование класса, достаточно указать ключевое слово sealed
перед определением класса. Как и следовало ожидать, класс не допускается объявлять одновременно как abstract
и sealed
, поскольку сам абстрактный класс реализован не полностью и опирается в этом отношении на свои производные классы, обеспечивающие полную реализацию.
Ниже приведен пример объявления класса типа sealed
.
sealed class А {
// . . .
}
// Следующий класс недопустим.
class В : A { // ОШИБКА! Наследовать класс А нельзя / / ...
}
Как следует из комментариев в приведенном выше фрагменте кода, класс В не может наследовать класс А, потому что последний объявлен как sealed
.
И еще одно замечание: ключевое слово sealed
может быть также использовано в виртуальных методах для предотвращения их дальнейшего переопределения. Допустим, что имеется базовый класс В и производный класс D. Метод, объявленный в классе В как virtual
, может быть объявлен в классе D как sealed
. Благодаря этому в любом классе, наследующем от класса % предотвращается переопределение данного метода. Подобная ситуация демонстрируется в приведенном ниже фрагменте кода:
class В {
public virtual void MyMethodO { /* ... */ }
}
class D : В {
// Здесь герметизируется метод MyMethodO и
// предотвращается его дальнейшее переопределение,
sealed public override void MyMethodO { /* ... */ }
}
class X : D {
// Ошибка! Метод MyMethodO герметизирован!
public override void MyMethodO { /* ••• */ }
}
Метод MyMethod()
герметизирован в классе D, и поэтому не может быть переопределен в классе X.
- Основы наследования
- Доступ к членам класса и наследование
- Конструкторы и наследование
- Наследование и сокрытие имен
- Создание многоуровневой иерархии классов
- Порядок вызова конструкторов
- Ссылки на базовый класс и объекты производных классов
- Виртуальные методы и их переопределение
- Применение абстрактных классов
- Предотвращение наследования с помощью ключевого слова sealed
- Класс object
- 8.14.2. Игнорирование наследования
- Ключевые слова
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- 1.2.1. Ключевые слова и идентификаторы
- Новые ключевые слова
- Прием 45. «Простые слова. Четкие идеи. Сильные эмоции»
- Вот как мы можем повлиять на коммерческий фактор (иными словами, повысить доверие посетителей к сайту)
- Обработка запросов с помощью PHP
- Приложение 11. Зарезервированные слова
- Как с помощью компьютера подшутить над друзьями и коллегами?