Почему изоляция класс?

94
задан BSMP 5 November 2018 в 02:50
поделиться

5 ответов

  • Иногда классы слишком драгоценны и не разработанные, чтобы быть наследованными.
  • Время выполнения/Отражение может сделать предположения наследования о запечатанных классах при поиске типов. Яркий пример этого - Атрибутам рекомендуют быть изолированными для скорости времени выполнения поиска. ввести. GetCustomAttributes (typeof (MyAttribute)) будет работать значительно быстрее, если MyAttribute будет изолирован.

статья MSDN для этой темы Ограничивающая Расширяемость путем Изоляции Классов .

41
ответ дан CVertex 24 November 2019 в 06:07
поделиться

Классы должны или быть разработаны для наследования или запретить его. Существует стоимость для разработки для наследования:

  • Это может придавить Вашу реализацию (необходимо объявить, какие методы собираются звонить, который другие методы, в случае, если пользователь переопределяет один, но не другой)
  • Это показывает реализацию, а не просто эффекты
  • , Это означает, что необходимо думать о большем количестве возможностей при разработке
  • , Вещам нравится, Равняется, тверды разработать в дереве наследования
  • , требуется больше документации
  • неизменный тип, который разделяется на подклассы, может стать изменяемым (ick)

Объект, 17 из Эффективного Java вдаются в большее количество подробностей об этом - независимо от того, что это записано в контексте Java, совет относится к.NET также.

Лично мне жаль, что классы не были изолированы по умолчанию в.NET.

99
ответ дан Mitch Wheat 24 November 2019 в 06:07
поделиться

Я нашел это предложение в документации MSDN: "Запечатанные классы, прежде всего, используются для предотвращения деривации. Поскольку они никогда не могут использоваться в качестве базового класса, некоторая оптимизация во время выполнения может сделать звонящих участников запечатанного класса немного быстрее".

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

4
ответ дан bruno conde 24 November 2019 в 06:07
поделиться

Производительность является важным фактором, например, строковый класс в Java является окончательным (< - изолированный), и причиной этого является производительность только. Я думаю, что другой важный момент должен избежать хрупкой проблемы базового класса, описанной подробно здесь: http://blogs.msdn.com/ericlippert/archive/2004/01/07/virtual-methods-and-brittle-base-classes.aspx

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

3
ответ дан Peter Parker 24 November 2019 в 06:07
поделиться

Изоляция позволяет Вам понимать некоторое незначительное увеличение производительности. Это менее верно в мире МОНЕТ В ПЯТЬ ЦЕНТОВ и ленивого pessimization, чем в мире скажем C++, но так как.NET не так хороша как pessimization, как компиляторы Java главным образом из-за различных принципов проектирования, это все еще полезно. Это говорит компилятору, что может непосредственно назвать любые виртуальные методы, а не назвать их косвенно через vtable.

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

0
ответ дан Edward KMETT 24 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: