Какой шаблон дизайна используется, чтобы дать классу дополнительные свойства? - PullRequest
4 голосов
/ 04 января 2012

Если у вас TableLayoutPanel на вашем Form и вы перетаскиваете Label в ячейку, для элемента управления Label доступно несколько свойств. Я думаю, что та же конструкция используется при перетаскивании элемента управления Tooltip на форму.

Я хотел бы знать, какой шаблон проектирования используется для достижения этой цели. Это шаблон декоратора?

Ответы [ 2 ]

7 голосов
/ 04 января 2012

То, что вы видите, называется Поставщики расширений .

Например, когда компонент ToolTip добавляется в форму, он предоставляет свойство ToolTip для каждого элемента управления вэта форма.Свойство ToolTip появляется в любом присоединенном элементе управления PropertyGrid.http://msdn.microsoft.com/en-us/library/ms171836.aspx

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

Вы должны реализовать IExtenderProvider.WinForms Designer вызовет CanExtend для каждого элемента управления на поверхности, и ваш расширитель может указать, предоставляет ли он дополнительные атрибуты для каждого элемента управления.

public interface IExtenderProvider {
    bool CanExtend(object extendee);
}

Фактические атрибуты, которые будут расширены другими элементами управления, объявляютсяиспользуя ProvidePropertyAttribute и метод для получения значения .

1 голос
/ 04 января 2012

Нет, это не достигается с помощью шаблона проектирования.Эти свойства являются просто открытыми свойствами, предоставляемыми элементом управления, эти свойства добавляются в элемент управления с помощью наследования, то есть они подкласс Control.Дизайнер Visual Studio проверяет класс, который реализует эти элементы управления, чтобы определить предоставляемые ими свойства, а затем предоставляет вам пользовательский интерфейс для их установки.

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