Контракты на код: как работать с унаследованными интерфейсами?

Я использую MS Code Contracts и столкнулся с проблемой с использованием наследования интерфейса и атрибутов ContractClassFor.

Учитывая эти интерфейсы и классы контракта:

[ContractClass(typeof(IOneContract))]
interface IOne { }
[ContractClass(typeof(ITwoContract))]
interface ITwo : IOne { }

[ContractClassFor(typeof(IOne))]
abstract class IOneContract : IOne { }
[ContractClassFor(typeof(ITwo))]
abstract class ITwoContract : IOneContract, ITwo { }

Допустим, IOne и ITwo являются существенными интерфейсами. Таким образом, IOneContract будет содержать значительное количество кода для необходимых проверок.

Я не хочу дублировать все это в ITwoContract для интерфейсов IOne. Я только хочу добавить новые контракты для интерфейсов ITwo. Наследование одного класса контракта от другого кажется вероятным способом повторного использования этого кода. Все же я получаю следующую ошибку:

EXEC : warning CC1066: Class 'ITwoContract' is annotated as being the contract for the interface 'ITwo' and cannot have an explicit base class other than System.Object.

Это ограничение в Кодексах или я делаю это неправильно? У нас много наследования интерфейсов в нашем проекте, и это похоже на преграду для контрактов кода, если я не могу понять, как обойти эту проблему.

Ответы на вопрос(1)

Ваш ответ на вопрос