如何在C#中使用"where"关键字和通用接口,以及继承

Sak*_*o73 4 .net c#

我想要实现的是:

  • 声明一个泛型类(<T>),
  • 将"T"限制为实现IMySpecialInterface <X>的类型(其中"X"不是已知类型),
  • 并让类继承自父类.

举一个错误的例子:

public class MyClass<T> : MyParentClass where T : IMySpecialInterface<X>
{
...
}
Run Code Online (Sandbox Code Playgroud)

实现此目的的正确语法是什么?

谢谢.

Mat*_*ott 13

除非在运行时创建了类型,否则不能在不知道类型的情况下使用泛型.

你最合适的是:

public class MyClass<T, U> : MyParentClass where T: IMySpecialInterface<U>
{

}
Run Code Online (Sandbox Code Playgroud)

更新还是可以使用dynamic


Fem*_*ref 7

IMySpecialInterface<X>除非为其提供辅助类型,否则您将需要定义非泛型版本MyClass.整个事情看起来像这样:

public interface IMySpecialInterface
{
}

public interface IMySpecialInterface<X> : IMySpecialInterface
{
}

public MyClass<T> : MyParentClass where T : IMySpecialInterface
{
}
Run Code Online (Sandbox Code Playgroud)


Lee*_*Lee 6

public class MyClass<T, X> : MyParentClass where T : IMySpecialInterface<X>
{
...
}
Run Code Online (Sandbox Code Playgroud)