CodeContracts: ccrewrite nicht mit Objektverweis auf eine Instanz eines Objekts eingestellt
-
04-10-2019 - |
Frage
Der Code unten macht ccrewrite Luft zu sprengen! Ideen? BTW, wenn Sie die ActualClass Kommentar aus, ccrewrite gelingt ...
[ContractClass(typeof(TestContracts))]
interface ITestInterface
{
bool IsStarted { get; set; }
void Begin();
}
class ActualClass : ITestInterface
{
public bool IsStarted { get; set; }
public void Begin()
{
this.IsStarted = true;
}
}
[ContractClassFor(typeof(ITestInterface))]
class TestContracts : ITestInterface
{
ITestInterface Current { get; set; }
private TestContracts()
{
Current = this;
}
#region ITestInterface Members
bool ITestInterface.IsStarted
{
get; set;
}
void ITestInterface.Begin()
{
Contract.Requires(!Current.IsStarted);
Contract.Ensures(Current.IsStarted);
}
Vielen Dank im Voraus!
Lösung
Nun, ich recht für nicht Jon Skeet gut genug lesen;) Das Bit, wie rewriter die Verträge und legt sie in Ihrer aktuellen Klasse nimmt ...
[ContractClassFor(typeof(ITestInterface))]
class TestContracts : ITestInterface
{
private TestContracts()
{
}
#region ITestInterface Members
bool ITestInterface.IsStarted
{
get; set;
}
void ITestInterface.Begin()
{
ITestInterface iface = this;
Contract.Requires(!iface.IsStarted);
Contract.Ensures(iface.IsStarted);
}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow