pau*_*doo 7 c# generics type-constraints
我想实现一个通用的C#类,其大致如下所示:
abstract class Foobar<T> : AbstractBase, T
{ ... }
Run Code Online (Sandbox Code Playgroud)
这失败了,因为C#只允许基类之后的类型成为接口,所以接下来我试试这个:
abstract class Foobar<T> : AbstractBase, T where T : interface
{ ... }
Run Code Online (Sandbox Code Playgroud)
但后来我发现C#不允许这种形式的类型约束.只有where T : struct与where T : class被允许.
如何指示类型参数必须只是接口类型?
该代码的真正问题在于您是从类型参数继承的。
试图编译
abstract class Foobar<T> : T { ... }
Run Code Online (Sandbox Code Playgroud)
仍然会失败:错误 CS0689:无法从 'T' 派生,因为它是一个类型参数。
我认为这至少在抽象类的情况下是完全合理的,我也想要这个功能,但是 c# 编译器不会让你这样做。