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