我希望以这样一种方式声明一个变量,即它只能分配从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)
}
现在,您只能使用实现
Control
的ISomething
其他变量调用Foo-尽管您无需指定泛型:Foo(someName);
是你所需要的全部。如果您提供的东西既不是
Control
又不是ISomething
,则编译器会告诉您。更新:我不“做” VB,但是反射器告诉我以上内容翻译为:
Private Sub Foo(Of T As { Control, ISomething })(ByVal control As T)
End Sub