Я бы хотел указать контракт для этого универсального интерфейса, используя кодовые контракты:
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> { … }
Кажется, что параметры типа нельзя использовать с атрибутами.
Как сделать Я пишу контракт для моего универсального интерфейса? Или это невозможно с Code Contracts?