2012-08-09 13 views
3

我不知道这是可能的,但是这是我的想法是:使用泛型创建可重用Control基类

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> { } 

我明白,我可以使用的接口,但后来我不得不重新输入/复制粘贴&所需的性能等,对于每一个新的控制我做。此外,我无法以TextBox/ComboBox的这种方式覆盖任何虚拟属性/方法。这可能吗?

+0

我对解决方案并不十分确定,但我认为您还需要一个“私人T”字段作为“基准”对象(您要封装的控件)。此外,方法将不得不检查“T”是为了触及它将要处理的每个不同控制的正确位置。我前段时间尝试了一些非常类似的东西,但由于整个项目的时间表很紧,因此放弃了 – Alex 2012-08-09 12:22:31

回答

1

继承是不同的,然后使用泛型。你想用'泛型'的方式指定你的类需要继承的东西,而不是,这是行不通的。你已经说过了,你不能覆盖任何属性,这是因为你不从你的T继承。必须必须从你的控件类型(T)继承。

0

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

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

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

private T Control; 

并作出一些调用,但就是这样。