Расширить класс без конструкторов - PullRequest
4 голосов
/ 20 октября 2008

В C # возможно ли расширить класс без конструкторов?

Может быть, я неправильно об этом думаю, и мне просто нужен удар в промежность. У меня есть класс Silverlight, который расширяет System.Windows.Media.Transform. С официальным выпуском Silverlight 2 Transform теперь не имеет конструктора. Поэтому, когда я компилирую свой класс, я получаю сообщение об ошибке, в котором говорится, что «Тип» ... Transform не имеет определенных конструкторов. '

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

Ответы [ 4 ]

9 голосов
/ 20 октября 2008

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

0 голосов
/ 21 октября 2008

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

0 голосов
/ 20 октября 2008

Невозможно, чтобы у какого-то класса не было конструктора. В каждом классе есть как минимум один AFAIK. Если вы не напишите, компилятор C # вставит вам конструктор по умолчанию (без параметров).

0 голосов
/ 20 октября 2008

Сокрытие всех общедоступных конструкторов - это метод, используемый для предотвращения создания подклассов и принуждения разработчиков использовать класс по назначению. Возможно, разработчик хочет, чтобы вы использовали Адаптер или Фасад или даже Прокси во время расширения.

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

Я видел попытки преобразования в шаблон Factory, где это делается способом, который предотвращает создание подклассов. То есть нет защищенного конструктора, доступного для подклассов. Иногда расширенные шаблоны объектов могут напрячь встроенные возможности языка.

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