gpt4 book ai didi

c# - 将功能扩展到 .NET 控件

转载 作者:太空狗 更新时间:2023-10-29 23:33:35 24 4
gpt4 key购买 nike

目前我正在使用一个工具,该工具需要创建某种带有一些附加字段的自定义 .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 字段添加到 Label 控件。这样我们确保了封装性和可维护性,但我们避免了 Tag 事情。

我很确定有很多比这些更好的选择。可能只是使用多态性——这个概念我仍然有问题——自定义控件类可以被删除。您认为哪些选项是最好的?您认为所有这些都可以做得更好吗?

最佳答案

如果您需要在设计时轻松控制属性并且您必须使用 Windows 窗体,您应该锁定此 http://msdn.microsoft.com/en-us/library/system.componentmodel.iextenderprovider.aspx

这样您就可以为不同的控件提供属性,而无需首先包装它们。

关于c# - 将功能扩展到 .NET 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9294014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com