Я слышал, что он сказал, что "сложно" создать для наследования, но я никогда не обнаружил, что это так. Может ли кто-нибудь (и кем бы то ни было, я имею в виду Джона Скита) объяснять, почему это, как утверждается, сложно, каковы подводные камни/препятствия/проблемы и почему простые смертные программисты не должны его пытаться и просто делают свои классы запечатанными для защиты невинных?
ОК, я об этом забыл, но мне любопытно узнать, есть ли у кого-то (в том числе и у Джона) трудности с "проектированием для наследования". Я действительно никогда не считал, что это проблема, но, возможно, я не замечаю того, что я считаю само собой разумеющимся, или что-то вникаю, не осознавая этого!
EDIT: спасибо за все отличные ответы. Я считаю, что консенсус в том, что для типичных классов приложений (подклассы WinForm, одноразовые классы утилиты и т.д.) Нет необходимости рассматривать повторное использование любого типа, а тем более повторное использование через наследование, тогда как для классов библиотек важно рассмотреть возможность повторного использования через наследование в дизайне.
Я действительно не думаю о классе WinForm, чтобы реализовать диалог графического интерфейса, как класс, который кто-то может использовать повторно - я как бы рассматриваю его как одноразовый объект. Но технически это класс, и кто-то может наследовать его, но это не очень вероятно.
Большая часть крупномасштабной разработки, которую я сделал, была библиотекой классов для базовых библиотек и фреймворков, поэтому разработка для повторного использования по наследству была критической - я просто никогда не считал ее "трудной", это было просто.; -)
Но я также никогда не рассматривал его в отличие от "одноразовых" классов для обычных прикладных задач, таких как WinForms и др.
Конечно, приветствуются дополнительные советы и ловушки проектирования для наследования; Я тоже попытаюсь бросить.