Code-Verträge: Wie gehe ich mit vererbten Schnittstellen um?

Ich verwende MS-Code-Verträge und bin mit der Verwendung von Schnittstellenvererbung und ContractClassFor-Attributen auf einen Haken gestoßen.

Gegeben diese Schnittstellen und Vertragsklassen:

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

Nehmen wir an, IOne und ITwo sind wesentliche Schnittstellen. IOneContract würde also eine erhebliche Menge an Code für die erforderlichen Überprüfungen enthalten.

Ich möchte nicht alles in ITwoContract für die IOne-Schnittstellen duplizieren. Ich möchte nur neue Verträge für die ITwo-Schnittstellen hinzufügen. Eine Vertragsklasse von einer anderen zu erben, scheint der wahrscheinlichste Weg zu sein, diesen Code wiederzuverwenden. Trotzdem bekomme ich folgenden Fehler:

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.

Ist dies eine Einschränkung in Code-Verträgen oder mache ich es falsch? Wir haben eine Menge Schnittstellenvererbung in unserem Projekt und das fühlt sich wie ein Deal Breaker für Code Contracts an, wenn ich nicht herausfinden kann, wie ich dieses Problem umgehen soll.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage