2009-02-14 64 views
1

我希望以這樣的方式聲明一個變量,因爲它只能分配從Control派生的值並且還實現ISomething接口。如何聲明一個類型爲「Control implements interface ISomething」的變量/參數?

我打算將ISomething接口添加到控件的衍生物。

我想從TextBox和DatePicker派生SpecialTextBox和SpecialDatePicker,並在每個接口上實現ISomething接口。

我希望能夠將這些控件中的每一個賦值給一個類型爲「控制其實現ISomething」的變量,以便從那裏他們可以調用它們的ISomething方法或者可以將其添加到控件集合上表單。

因此....我如何聲明類型爲「Control也實現了ISomething」的變量「

理想情況下,答案是在VB.Net中,但我也會對C#方法感興趣。要做到這一點

+0

(注答案評論) – 2009-02-14 19:24:02

回答

10

一種方法是使用泛型 - 即通用的方法:

void Foo<T>(T control) where T : Control, ISomething 
{ 
    // use "control" 
    // (you have access to all the Control and ISomething members) 
} 

現在,您可以撥打美孚與是Control實現ISomething其他變量 - 你不需要指定通用,但:

Foo(someName); 

是你所需要的。如果你給它的東西不是ControlISomething,編譯器會告訴你。


更新:我不「做」 VB,但反射告訴我,上面的翻譯爲:

Private Sub Foo(Of T As { Control, ISomething })(ByVal control As T) 

End Sub 
+0

這將需要一段時間我理解這一點,但這是我後 – 2009-02-14 15:34:04

相關問題