Poniższy kod daje mi ostrzeżenie Contract class 'FooContracts' should be an abstract class
. Ze wszystkich przykładów, które przeczytałem online (np. http://www.infoq.com/articles/code-contracts-csharp), to powinno działać (prawdopodobnie bez ostrzeżeń kompilatora).Klasa zamówienia powinna być klasą abstrakcyjną
[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);
}
}
jestem w Visual Studio 2010, z następującymi ustawieniami w sekcji Code Contracts
właściwości projektu:
- Wykonaj Runtime kontraktu Sprawdzanie (zestaw do
Full
) - Wykonaj Static kontraktu Sprawdzanie (pod
Static Checking
) - Sprawdź w tle
Zdefiniowałem również symbol kompilacji CONTRACTS_FULL
, aby zamknąć ReSharper.
Czy brakuje mi czegoś, co zmusi do kompilacji bez ostrzeżeń?
huh. dzięki za link. ten fakt nigdy nie został wspomniany ani zademonstrowany w jakimkolwiek przykładowym kodzie, który znalazłem. – tmont