哪种设计模式用于为类提供额外的属性?

时间:2012-01-04 08:38:01

标签: c# winforms design-patterns

TableLayoutPanel上有Form并且您将Label拖到单元格中时,Label控件上会显示一些属性。我认为在表单上拖动Tooltip控件时会使用相同的构造。

我想知道使用哪种设计模式来实现这一目标。这是装饰者模式吗?

2 个答案:

答案 0 :(得分:7)

您所看到的内容称为Extender Providers

  

例如,当工具提示组件添加到表单时,它提供   一个名为ToolTip的属性,用于该表单上的每个控件。工具提示   属性然后出现在任何附加的PropertyGrid控件中。   http://msdn.microsoft.com/en-us/library/ms171836.aspx

我无法想象一个众所周知的模式,它描述了它们是如何工作的,但机制很简单。

您必须实施IExtenderProvider。 WinForms Designer将为表面上的每个其他控件调用CanExtend,并且扩展程序可以指定它是否为每个控件提供其他属性。

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

将使用ProvidePropertyAttributea method to provide the value声明其他控件将扩展的实际属性。

答案 1 :(得分:1)

不,这不是通过设计模式实现的。这些属性只是控件公开的公共属性,这些属性通过继承添加到控件中,即它们是子类Control。 visual studio designer检查实现这些控件的类以确定它们公开的属性,然后为您提供用于设置它们的UI。