Почему BitmapImage является закрытым классом? - PullRequest
0 голосов
/ 12 февраля 2010

Я собирался наследовать от класса BitmapImage, когда заметил, что он запечатан, я быстро осмотрелся, но не могу найти причину, по которой он запечатан.

Кто-нибудь знает, почему это так?

Спасибо

Ответы [ 3 ]

5 голосов
/ 12 февраля 2010

BitmapImage , скорее всего, запечатан, потому что в его дизайне есть определенный сценарий использования, он должен быть:

специализированный BitmapSource, оптимизированный для загрузки изображений с использованием расширяемого языка разметки приложений (XAML).

Сделав класс запечатанным, это делает его более безопасным для использования из XAML, поскольку синтаксический анализатор XAML всегда будет точно знать, что будет создано.

Если вы хотите написать свой собственный, вы должны использовать вместо BitmapSource , который является абстрактным и предназначен для использования в подклассах.

2 голосов
/ 12 февраля 2010

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

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

2 голосов
/ 12 февраля 2010

Наличие открытого класса эквивалентно высказыванию «Я хочу, чтобы люди унаследовали от этого типа». Это заставляет людей наследовать от типа, является ли это хорошей идеей (см., Например, многочисленные вопросы StackOverflow, где люди наследуют от List<T>).

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

...