Dot-Net

程式碼合同:如何為通用介面提供合同類?

  • January 27, 2010

我想為這個通用介面指定一個合同,使用程式碼合同:

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<>))] 

引用自:https://stackoverflow.com/questions/2150983