Контракты кода: Как я предоставляю класс контракта для универсального интерфейса?

Я хотел бы указать контракт для этого универсального интерфейса, с помощью Контрактов Кода:

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

Кажется, что параметры типа не могут использоваться с атрибутами.

Как я составляю договор для своего универсального интерфейса? Или разве это не возможно с Контрактами Кода?

33
задан stakx supports GoFundMonica 4 January 2012 в 22:25
поделиться

2 ответа

Как упомянуто другими комментариями В этом вопросе вы должны удалить идентификатор универсального типа из вашего использования атрибута, так как не может быть разрешен в период компиляции:

[ContractClass(typeof(IRandomWriteAccessibleContract<>))] 
45
ответ дан 27 November 2019 в 18:30
поделиться
- 3594977-

Хороший вопрос, но вы можете увидеть технические причины этого ограничения, верно?

Причина, по которой вы не можете указать контракту, это связано BLAH не является классом.

Если вы можете сделать интерфейс для конкретного класса, указав значение для t , хотя я уверен, что это подаптимально.

1
ответ дан 27 November 2019 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: