为什么实现具有类型约束的通用接口的泛型类需要重复这些约束?

时间:2015-02-05 18:30:00

标签: c# .net generics inheritance interface

假设我有一个以下的C#界面:

public interface IInterface<T> where T : SomeClass
{
    void InterfaceMethod();
}

SomeClass的定义如下:

public class SomeClass
{
    public void SomeMethod();
}

现在我想定义接口的实现,它不会编译:

public class InterfaceImpl<T> : IInterface<T> 
{
    public void InterfaceMethod()
    {
        T test = default(T);
        test.SomeMethod(); //Gives Error
    }
}

之后我将其更改为:

public class InterfaceImpl<T> : IInterface<T> where T : SomeClass
{
    public void InterfaceMethod()
    {
        T test = default(T);
        test.SomeMethod(); //Compiles fine
    }
}

类型约束在界面上也是“继承”(不是正确的词,我知道)不是没有意义吗?

1 个答案:

答案 0 :(得分:9)

该类不需要重复这些约束,它需要提供满足接口约束的类型。有几种方法可以做到:

  • 它可以提供满足约束的特定类型,或
  • 它可以将自己的约束放在更强的泛型类型上,而不是接口所期望的那样,或者
  • 它可以从界面重复约束。

关键是T中的InterfaceImpl<T>属于InterfaceImpl,因此T上的约束必须是InterfaceImpl&#39}。自己的。