【发布时间】:2013-09-20 09:20:31
【问题描述】:
我可以有一个非通用接口的嵌套合同类型:
[ContractClass(typeof(Foo.FooContracts))]
public interface IFoo
{
string Bar(object obj);
}
但是当我尝试使用通用接口做同样的事情时它会抱怨:
[ContractClass(typeof(Foo.FooContracts<>))]
public interface IFoo<T>
{
string Bar(T obj);
}
警告是:
合约类
Foo+FooContracts`1和类型IFoo`1必须具有相同的声明类型(如果有)。
如果我从 Foo 类中得到 FooContracts,它将在没有警告的情况下编译。
- 为什么泛型接口存在这种限制?
- 为什么非泛型的限制不存在?
【问题讨论】:
-
作为一个实验,我将一个非泛型
FooContracts嵌套在一个泛型Foo<T>类中,并按上述方式设置所有内容。除了您显示的消息之外,这现在还会生成“合同类 'Foo1+FooContracts' and the type 'IFoo1' 必须同意所有通用参数。”我想知道这是否是他们试图通过制定您找到的规则来避免的泥潭的开始。 -
@Damien:好主意!我认为这很有可能,因为它也解释了为什么它不会出现在非泛型接口中。
标签: c# generics interface code-contracts