Der folgende Code gibt mir die Warnung Contract class 'FooContracts' should be an abstract class
. Von allen Beispielen, die ich online gelesen habe (z. B. http://www.infoq.com/articles/code-contracts-csharp), sollte dies funktionieren (vermutlich ohne Compiler-Warnungen).Vertragsklasse sollte eine abstrakte Klasse sein
[ContractClass(typeof(FooContracts))]
public interface IFoo {
void Bar(string foo);
}
[ContractClassFor(typeof(IFoo))]
internal sealed class FooContracts : IFoo {
void IFoo.Bar(string foo) {
Contract.Requires(foo != null);
}
}
Ich bin in Visual Studio 2010, mit den folgenden Einstellungen im Code Contracts
Abschnitt der Eigenschaften des Projektes:
- Perform Runtime Vertrag prüfen (auf
Full
) - Perform Static Vertrag prüfen (unter
Static Checking
) - Einchecken im Hintergrund
Ich habe auch das Kompilierungssymbol CONTRACTS_FULL
definiert, um ReSharper zum Schweigen zu bringen.
Fehle ich etwas, um dieses kompilieren ohne Warnungen zu machen?
huh. Danke für den Link. diese Tatsache wurde in keinem von mir gefundenen Beispielcode erwähnt oder demonstriert. – tmont