Я хотел бы указать контракт для этого универсального интерфейса, с помощью Контрактов Кода:
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<>))]
Хороший вопрос, но вы можете увидеть технические причины этого ограничения, верно?
Причина, по которой вы не можете указать контракту, это связано BLAH
не является классом.
Если вы можете сделать интерфейс для конкретного класса, указав значение для t
, хотя я уверен, что это подаптимально.