2012-08-09 20 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; 

並作出一些調用,但就是這樣。