Contratos de código: ¿Cómo lidiar con las interfaces heredadas?

Estoy usando MS Code Contracts y me he encontrado con un problema al usar la herencia de interfaz y los atributos ContractClassFor.

Dadas estas interfaces y clases de contrato:

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

Digamos que IOne e ITwo son interfaces sustanciales. Por lo tanto, IOneContract tendría una cantidad significativa de código para las comprobaciones necesarias.

No quiero duplicar todo eso en ITwoContract para las interfaces IOne. Solo quiero agregar nuevos contratos para las dos interfaces. Heredar una clase de contrato de otra parece la forma más probable de reutilizar ese código. Sin embargo, recibo el siguiente error:

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.

¿Es esto una limitación en los contratos de código o lo estoy haciendo mal? Tenemos mucha herencia de interfaz en nuestro proyecto y esto se siente como un factor decisivo para los contratos de código si no puedo encontrar la manera de solucionar este problema.

Respuestas a la pregunta(1)

Su respuesta a la pregunta