使用泛型创建可重用的基类Control类

时间:2012-08-09 12:17:25

标签: c# winforms generics custom-controls

我不知道这是否可能,但这就是我的想法:

public class ValidationControl<T> where T : Control, new()
{
    [Browsable(true)]
    [Category("Validation")]
    [DefaultValue(false)]
    public bool Required { get; set; }

    public ValidationControl() { Required = false; }

    public virtual void RunValidation() { ... }
}

然后,对于我的所有自定义控件,我可以简单地将通用控件用作可重用的基类:

public class ValidationTextBox : ValidationControl<TextBox> { }

public class ValidationComboBox : ValidationControl<ComboBox> { }

我知道我可以使用接口但是我必须重新输入/复制&amp;为我制作的每个新控件粘贴所需的属性等。此外,我无法以TextB / ComboBox的方式覆盖任何虚拟属性/方法。这可能吗?

2 个答案:

答案 0 :(得分:1)

继承与使用泛型不同。您希望以“泛型”方式指定您的类需要继承的内容,而不是,这不会起作用。你已经说过了,你不能覆盖任何属性,这是因为你没有从你的T继承。

为使您的控件正常工作,必须继承您的控件类型(T)。

答案 1 :(得分:0)

  

此外,我无法以这种方式覆盖任何虚拟属性/方法   对于TextBox / ComboBox。这可能吗?

您将无法覆盖TextBox / ComboBox中的任何内容。您只能从基类覆盖虚方法,在您的示例中,只有可覆盖的方法是RunValidation()(ValidationControl是基类)。

你的类可以包含TextBox / ComboBox,f。 E:

private T Control;

然后拨打电话,但就是这样。