Ограничение расширяемости путем запечатывания классов
Обновлен: Ноябрь 2007
Чтобы ограничить способы расширения данной платформы разработчиками, можно запечатывать классы. Если класс запечатан, другие классы не могут наследовать от него. При запечатывании члена производные классы не могут переопределить реализацию члена. Не следует запечатывать типы и члены, используемые по умолчанию. Запечатывание запрещает пользовательскую настройку типов и членов библиотеки и понижает удобство использования библиотеки для некоторых разработчиков. Кроме того, расширяемость является одним из фундаментальных преимуществ использования объектно-ориентированной платформы. Прежде чем ограничить это преимущество, следует тщательно взвесить все последствия.
Не запечатывайте классы без серьезной причины.
Не следует считать, что, если создатель класса не может представить себе ситуацию, в которой расширение класса было бы желательно, то это является существенным основанием для запечатывания класса. Следует запечатывать классы, удовлетворяющие определенным условиям, перечисленным ниже.
Класс является статическим.
Класс содержит производные защищенные члены, содержащие конфиденциальную информацию.
Класс наследует от многих виртуальных членов, и затраты на разработку и тестирование при запечатывании каждого члена значительно больше, чем запечатывание всего класса.
Класс является атрибутом, для которого требуется быстрый поиск с использованием отражения. Запечатывание атрибута улучшает производительность отражения при извлечении атрибутов.
Не объявляйте защищенные или виртуальные члены в запечатанных типах.
Если тип запечатан, он не может иметь производных классов. Доступ к защищенным членам может осуществляться только из производного класса, а виртуальные члены можно переопределять только в производном классе.
Рекомендуется запечатывать переопределяемые члены.
Этот метод можно использовать для обеспечения того, что производные классы не найдут способ изменить или обойти поведение, требуемое для текущего класса и всех производных классов.
Фрагменты — © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.
Фрагменты — © Addison-Wesley Corporation. Все права защищены.
Дополнительные сведения о рекомендациях по разработке см. в книге "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries", Krzysztof Cwalina and Brad Abrams, Addison-Wesley, 2005.