Запечатанные Классы в C # - PullRequest
0 голосов
/ 13 сентября 2018

Я знаю функциональность класса Sealed.Это не наследуется.Но мой вопрос: зачем нам запечатанный класс?Если мотивом является не наследование свойств и методов, почему бы просто не объявить их частными?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

1.На классе, который реализует функции безопасности, так что исходный объект не может быть «олицетворен».

2. В целом, я недавно обменялся с человеком в Microsoft, который сказал мне, что они пытались ограничить наследование теми местами, где оно действительно имело смысл, потому что оно становится дорогим с точки зрения производительности, если его не лечить. Ключевое слово sealed сообщает CLR, что ниже нет класса для поиска методов, и это ускоряет процесс.

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

0 голосов
/ 13 сентября 2018

Вы можете оставить членов публичными, чтобы их мог использовать код вне класса.Это может происходить независимо от того, существует наследование или нет.

Причина, по которой класс может нуждаться в запечатывании, заключается в том, что наследование должно быть разработано.Автор класса должен учитывать, каким образом наследующий код будет взаимодействовать с кодом базового класса.

По моему мнению, в языке C # ошибочно делать классы наследуемыми по умолчанию.Java пошла еще дальше и по умолчанию сделала методы virtual, что для многих кажется ошибкой проектирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...