通用接口的嵌套合同

Şaf*_*Gür 9 c# generics interface code-contracts

我可以为非泛型接口设置嵌套合同类型:

[ContractClass(typeof(Foo.FooContracts))]
public interface IFoo
{
    string Bar(object obj);
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用通用接口做同样的事情时,它会抱怨:

[ContractClass(typeof(Foo.FooContracts<>))]
public interface IFoo<T>
{
    string Bar(T obj);
}
Run Code Online (Sandbox Code Playgroud)

警告是:

合同类Foo+FooContracts`1和类型IFoo`1必须具有相同的声明类型(如果有).

如果我FooContracts离开Foo课堂,它会在没有警告的情况下编译.

  • 为什么通用接口存在这种限制?
  • 为什么非通用的限制不存在?

小智 1

存在限制的原因是我们需要将契约从声明点复制到插入点,如果存在通用的周围类,情况会变得更加复杂。实际上没有必要将契约类嵌套在我看到的其他类型中。