我希望以这样一种方式声明一个变量,即它只能分配从Control派生并实现ISomething接口的值。

我打算将ISomething接口添加到控件的派生类中。

我想从TextBox和DatePicker派生SpecialTextBox和SpecialDatePicker并在每个对象上实现ISomething接口。

我希望能够将这些控件中的每一个分配给类型为“也实现ISomething的控件”的变量,以便从那里可以调用其ISomething方法或将其添加到表单上的控件集合中。

所以...。如何声明类型为“ Control的变量,它也实现ISomething”?

理想的答案是在VB.Net中,但我也会对C#方法感兴趣。

最佳答案

一种方法是使用泛型-即泛型方法:

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


现在,您只能使用实现ControlISomething其他变量调用Foo-尽管您无需指定泛型:

Foo(someName);


是你所需要的全部。如果您提供的东西既不是Control又不是ISomething,则编译器会告诉您。



更新:我不“做” VB,但是反射器告诉我以上内容翻译为:

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

End Sub

08-26 16:46