Подтвердить что ты не робот

Должен ли я запечатывать все классы, которые, как я знаю, никогда не должны использоваться в качестве базового класса?

Должен ли я запечатывать все классы, которые, как я знаю, никогда не должны использоваться в качестве базового класса, даже если нет ощутимых проблем с производительностью или безопасностью, или это просто добавление трещины?

4b9b3361

Ответ 1

Класс, который является расширяемым, реализует функцию, которую он может расширить, - такую ​​функцию, как любую другую особенность класса, и должен рассматриваться как один, отличный от метода. Все функции должны быть тщательно продуманы, чтобы гарантировать, что они отвечают целям клиента, использующего эту функцию. Особенности необходимо разрабатывать, реализовывать, проверять на предмет безопасности, отлаживать, документировать и поддерживать.

Все, что стоит усилий и усилий, обычно требует затрат денег. Чьи деньги вы тратите? У них может быть мнение о том, следует ли вам делать эту функцию или нет.

В принципе, у вас есть три варианта:

1) Потратьте деньги на выполнение этой функции, чтобы у вас была уверенность, что она правильная, надежная, безопасная и отвечает потребностям пользователей.

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

3) Запечатайте класс. Освободите его позже, если вы обнаружите, что (1) был правильным выбором.

Я говорю, что (3) является хорошим значением за деньги. Я всегда запечатываю каждый класс, который я пишу, который не был предназначен для расширяемости.

Ответ 2

Установка класса sealed не является жестким, так как это устанавливает строгий правило в вашем коде: этот класс не может быть унаследован.

Код только крутой, если он не нужен и запутан.

Тем не менее, одна школа мысли (и простое правило большого пальца) состоит в том, что вы всегда должны запечатывать все классы, так как легко при необходимости распечатать их, но не наоборот. Некоторые генераторы кода делают это автоматически. (См. Выше вариант Эрика Липперта № 3. В основном он говорит то же самое.)

Ответ 3

Я бы не подумал, что это вообще добавляет рывок. Вместо этого вы четко выражаете свои намерения для этого класса.

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

Ответ 4

Да. Если ничто другое не означает, что указатель позволяет другим узнать, что они не должны идти дальше по тропе.