sealed or not sealed
От: igna Россия  
Дата: 22.10.08 10:23
Оценка:
Объявляете ли вы каждый класс, от которого не собираетесь наследовать, sealed или на всякий случай оставляете возможность наследовать от него?
Re: sealed or not sealed
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.10.08 10:26
Оценка: +5
Здравствуйте, igna, Вы писали:

I>Объявляете ли вы каждый класс, от которого не собираетесь наследовать, sealed или на всякий случай оставляете возможность наследовать от него?


Объявляю sealed. Наследование (за исключением некоторых особых случаев) — зло.
Re: sealed or not sealed
От: Dr_Sh0ck Беларусь  
Дата: 22.10.08 10:33
Оценка:
Здравствуйте, igna, Вы писали:

I>Объявляете ли вы каждый класс, от которого не собираетесь наследовать, sealed или на всякий случай оставляете возможность наследовать от него?


Стараюсь. Но бывает что ленюсь/забываю.
Do not fake yourself ;)
ICQ#: 198114726
Re: sealed or not sealed
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 22.10.08 10:35
Оценка:
Здравствуйте, igna, Вы писали:

I>Объявляете ли вы каждый класс, от которого не собираетесь наследовать, sealed или на всякий случай оставдяете возможность наследовать от него?


Кто использует эти классы? Команда проекта или сторонние разработчики (например фрэймворк)?
Если сторонние разработчики, то необходимо думать об обратной совместимости — если вы в 1-ой версии не объявите его sealed, то во 2-ой версии без breaking changes не получится отменить свое решение. Что-то подобное с виртуальными методами — делайте методы виртуальными только тогда, когда вы уверенны, что они должны быть виртуальными. То есть лучше быть more strict.
Re: sealed or not sealed
От: _FRED_ Черногория
Дата: 22.10.08 10:42
Оценка: 1 (1) +1
Здравствуйте, igna, Вы писали:

I>Объявляете ли вы каждый класс, от которого не собираетесь наследовать, sealed или на всякий случай оставляете возможность наследовать от него?


Добавлю. Класс, который позволяет наследоватся от себя (а таковым является каждый не-sealed класс), должен проектироваться с большим вниманием, с учётом обеспечения необходимых возможностей для наследников. Приходится, по сути, поддерживать два контракта — открытый, для пользователей, и защищённый, для наследников. Что бы сделать такую поддержку непротиворечивой, согласованной и безопастной надо продумать дизайн отдельно.

ИМХО, один из лучших примеров "хорошего" базового класса: Collection<T>. Попробуйте сами, не смотря на его реализацию, написать базовый расширяемый класс пользовательских коллекций и сравните.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Help will always be given at Hogwarts to those who ask for it.
Re[2]: sealed or not sealed
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 22.10.08 10:51
Оценка: 1 (1) +1
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, igna, Вы писали:


I>>Объявляете ли вы каждый класс, от которого не собираетесь наследовать, sealed или на всякий случай оставляете возможность наследовать от него?


N>Объявляю sealed. Наследование (за исключением некоторых особых случаев) — зло.


IMHO, класс должен быть по умолчанию sealed и только явные действия разработчика должны переводить его в обратное состояние (методы по умолчанию невиртуальные, то есть по умлочанию расширяемость запрещена — к сожалению классы ведут себя иначе ).
Re: sealed or not sealed
От: k0stya  
Дата: 22.10.08 11:31
Оценка:
Здравствуйте, igna, Вы писали:

I>Объявляете ли вы каждый класс, от которого не собираетесь наследовать, sealed или на всякий случай оставдяете возможность наследовать от него?




Лично я пытаюсь не забывать добавлять sealed...)
Re: sealed or not sealed
От: Воронков Василий Россия  
Дата: 23.10.08 11:53
Оценка:
Здравствуйте, igna, Вы писали:

I>Объявляете ли вы каждый класс, от которого не собираетесь наследовать, sealed или на всякий случай оставляете возможность наследовать от него?


Я разрешаю наследоваться от класса (и в таких случаях делаю мемберы виртуальными) только если наследование предполагается исходя из самого предназначения класса. В остальных — строго sealed.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.