【发布时间】:2010-01-27 23:01:43
【问题描述】:
我想为这个通用接口指定一个契约,使用代码契约:
interface IRandomWriteAccessible<T>
{
T this[uint index] { set; }
uint Length { get; }
}
文档说在为接口指定契约时使用ContractClass 属性。但是,编译器会抱怨这个:
[ContractClass(typeof(IRandomWriteAccessibleContract<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
interface IRandomWriteAccessible<T> { … }
[ContractClassFor(typeof(IRandomWriteAccessible<T>))]
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <-- compiler error
sealed class IRandomWriteAccessibleContract<T> : IRandomWriteAccessible<T> { … }
类型参数好像不能和属性一起使用。
如何为我的通用接口编写合同?还是代码合同无法做到这一点?
【问题讨论】:
-
我还没有验证这一点,但是从您的属性用法中删除
T,如下所示:[ContractClass(typeof(IRandomWriteAccessibleContract<>))]
标签: .net generics interface code-contracts