.net – 代码合同:如何为通用接口提供合同类?

我想使用代码合同为这个通用接口指定一个合同:

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> { … }

看来类型参数不能与属性一起使用。

如何为我的通用接口编写合同?或者这是不可能与代码合同?

正如此问题中的其他注释所提到的,您应该从属性使用中删除泛型类型标识符,因为它无法在编译时解析:

[ContractClass(typeof(IRandomWriteAccessibleContract<>))] 
http://stackoverflow.com/questions/2150983/code-contracts-how-do-i-supply-a-contract-class-for-a-generic-interface

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:.net – 代码合同:如何为通用接口提供合同类?