Герметизированные классы в C#

Иногда имеются намерения сделать создаваемый новый класс базовым классом — заготовкой для дальнейшей специализации.

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

В С# предлагается ключевое слово sealed для тех случаев, когда нужно сделать так, чтобы клиент не мог наследовать свой класс от конкретного класса. Примененное к целому классу, ключевое слово sealed указывает на то, что данный класс является листовым в дереве наследования.

Под этим понимается запрет наследования от данного класса. Если диаграмма наследования представлена в виде деревьев, то sealed-классы имеет смысл называть листовыми.

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

Наследование — такая хитрая штука, что для того, чтобы класс был хорошим базовым классом, он должен сразу проектироваться с таким прицелом. В противном случае сразу помечайте его как sealed. Это очень просто. Может также возникнуть вопрос: почему бы ни обеспечить максимальную гибкость, оставив класс негерметизированным, чтобы кто-нибудь в будущем мог выполнять наследование от него? При хорошем дизайне это не допускается.

Следует еще раз подчеркнуть: класс, предназначенный для того, чтобы служить базовым классом, должен быть спроектирован с учетом этого с самого начала. Если это не так, то весьма вероятно, что наследование от него производного класса будет сопряжено со многими сложностями.

Во многих случаях классы, предназначенные служить расширяемыми базовыми классами, находятся в библиотеках. Создание библиотек — кропотливое дело, которому нужно посвятить много времени, обеспечивая максимальную применимость этих библиотек. Вдобавок, однажды опубликовав библиотеку, вы обречены сопровождать ее в течение длительного времени.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100