C#接口可以要求或指定特定的类吗?

Mel*_*een 4 c# interface constraints

我是否可以声明一个接口(即IMySpecialControl),它需要实现它的类也从一些基类继承(即System.Windows.Controls.UserControl)?

我的想法是,不,这是不可能的.但是以这样的方式编写客户端代码非常好,它只需要一个'IMySpecialControl'来定义它关心的几个成员,它可以指望该对象也是一个UserControl,然后它可以添加到GUI或操作.

我知道我总是可以检查定义为'IMySpecialControl'的对象实例是否也是UserControl,但我希望在.Net中可能有一些光滑的技巧我不知道.:-)

Jon*_*eet 9

我是否可以声明一个接口(即IMySpecialControl),它需要实现它的类也从一些基类继承(即System.Windows.Controls.UserControl)?

不,C#中没有任何内容可以定义.

创建一个抽象子类可能是最简单的UserControl.

可以做的是有一个泛型方法或类型,其限制是type参数实现一个接口并且与一个类兼容:

public void Foo<T>(T control) where T : UserControl, IMySpecialControl
Run Code Online (Sandbox Code Playgroud)

我不知道这是否对您的特定情况有帮助,但它是您可以达到原始要求的最接近的.

  • 谢谢,我没有考虑过创建一个UserControl的抽象子类,我没有意识到实际上是可能的,但你是对的,它比接口更好地解决问题.我曾考虑使用泛型来创建约束,但这确实需要一些其他实现中的方法,这并不理想. (2认同)