Похоже, что официальные руководящие принципы Microsoft по запечатыванию эволюционировали с тех пор, как этот вопрос был задан ~ 9 лет назад, и они перешли от философии согласия (печать по умолчанию) к отказу (по умолчанию не запечатывать):
X НЕ закрывайте классы без уважительной причины.
Запечатывание класса из-за того, что вы не можете придумать сценарий расширения, не является хорошей причиной. Пользователи фреймворка любят наследовать классы по разным неочевидным причинам, например, добавляя удобные члены. См. В разделе «Незапечатанные классы» примеры неочевидных причин, по которым пользователи хотят наследовать от типа.
К веским причинам для запечатывания класса относятся следующие:
- Класс - это статический класс. См. Разработка статического класса.
- Класс хранит чувствительные к безопасности секреты в унаследованных защищенных членах.
- Класс наследует множество виртуальных членов, и стоимость их индивидуального запечатывания перевесит выгоды от оставления класса незапечатанным.
- Класс - это атрибут, который требует очень быстрого поиска во время выполнения. Запечатанные атрибуты имеют несколько более высокие уровни производительности, чем незапечатанные. См. Атрибуты.
X НЕ объявляйте защищенные или виртуальные члены для запечатанных типов.
По определению, запечатанные типы не могут быть унаследованы от. Это означает, что защищенные члены запечатанных типов не могут быть вызваны, а виртуальные методы запечатанных типов не могут быть переопределены.
✓ РАССМАТРИВАЙТЕ элементы уплотнения, которые вы игнорируете. Проблемы, которые могут возникнуть в результате введения виртуальных членов (обсуждаемых в разделе «Виртуальные члены»), также относятся к переопределениям, хотя и в несколько меньшей степени. Запечатывание переопределения защищает вас от этих проблем, начиная с этой точки в иерархии наследования.
Действительно, если вы выполните поиск в кодовой базе ASP.Net Core , вы найдете только около 30 случаев sealed class, большинство из которых являются атрибутами и тестовыми классами.
Я действительно думаю, что сохранение неизменности - хороший аргумент в пользу запечатывания.