3

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

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 覆盖任何虚拟属性/方法。这可能吗?

4

2 回答 2

1

继承与使用泛型不同。你想以“泛型”的方式指定你的类需要继承什么,不,那是行不通的。你已经说过了,你不能覆盖任何属性,这是因为你没有从你的 T 继承。

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

于 2012-08-09T12:26:18.823 回答
0

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

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

你的类可以包含 TextBox/ComboBox,fe:

private T Control;

并打一些电话,但仅此而已。

于 2012-08-09T12:23:43.850 回答