gpt4 book ai didi

c# - 如何声明 "Control implementing interface ISomething"类型的变量/参数?

转载 作者:太空宇宙 更新时间:2023-11-03 17:47:39 24 4
gpt4 key购买 nike

我希望以这样的方式声明一个变量,因为它只能分配从 Control 派生的值并且还实现 ISomething 接口(interface)。

我打算将 ISomething 接口(interface)添加到控件的衍生物中。

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

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

所以....我如何声明一个类型为“Control which also implements 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)
}

现在您可以调用 Foo 仅限 与其他变量为 Control实现 ISomething - 你不需要指定泛型,但是:
Foo(someName);

是你所需要的全部。如果你给它的东西不是 ControlISomething ,编译器会告诉你。

更新:我不“做”VB,但反射器告诉我上面的翻译为:
Private Sub Foo(Of T As { Control, ISomething })(ByVal control As T)

End Sub

关于c# - 如何声明 "Control implementing interface ISomething"类型的变量/参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/549220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com