【发布时间】:2012-02-15 13:06:45
【问题描述】:
目前我正在使用一种工具,该工具需要创建某种带有一些附加字段的自定义 .NET。我一直想知道哪种方法可以更好地解决这个问题,并考虑了以下选项:
选项 A: - 为每个控件创建一个派生类(比如说,CLabel、CGroupBox...),我在其中定义每个类的新字段。这意味着可维护性更差,但易于操作。
例子:
class CLabel: Label
{
public List<Control> RelatedControls {get; set;}
public String textHint;
// more stuff...
public CLabel()
{}
}
选项 B:
- 此选项意味着不从每个控件创建派生类,而是使用实际的 Label、GroupBox 等控件并创建一个封装所有“额外”属性的类。这个额外的属性对象将在Control.Tag 属性中引用。我对此表示怀疑,因为在 Tag 属性中引用一种复杂的对象对我来说有点糟糕,但这意味着更好的可维护性,当然也不需要子类化控件。
例子:
Label lbl = new Label();
lbl.Tag = new ControlDescription();
选项 C:
- 这意味着具有选项 A 和 B 的某种组合。只需创建自定义控件,例如 CLabel,它将类型 ControlDescription 字段添加到标签控件。这样我们确保了封装性和可维护性,但我们避免了Tag 的事情。
我很确定有很多比这些更好的选择。可能只是使用多态性 - 我仍然有问题的概念 - 自定义控件类可能会被带走。您认为这些选项中哪一个是最好的?您认为所有这些都可以做得更好吗?
【问题讨论】: