Nehmen Sie den folgenden Code an:
%Vor%Die Verträge versuchen zu sagen:
IsFooSet
gibt true
zurück, wenn Foo
nicht null
. Foo
gibt null
nicht zurück, wenn IsFooSet
true
zurückgibt. Das funktioniert fast.
Allerdings bekomme ich eine "garantiert unbewiesen" auf return _foo;
, weil der Prüfer nicht erkennt, dass Foo
immer gleich _foo
ist.
Das Ändern von Foo
in eine automatische Eigenschaft mit einem private
Setter entfernt diese Warnung, aber ich möchte das nicht tun (ich mag keine automatischen Eigenschaften mit privaten Sätzen).
Was muss ich im obigen Code ändern, damit die Warnung verschwindet und gleichzeitig das Feld _foo
beibehalten wird?
Folgendes funktioniert nicht:
IsFooSet
zur Verwendung von _foo
anstelle von Foo
. Es wird eine zusätzliche "garantiert unbewiesen" auf IsFooSet
ergeben. Foo == _foo
. Dies führt zu einer "unveränderten Invariante" für den impliziten Standardkonstruktor. Darüber hinaus wird auf einer realen Code-Basis die Verarbeitungszeit des statischen Checkers um Größenordnungen höher sein. Contract.Ensures(Contract.Result<string>() == _foo);
zum Getter von Foo
gemäß diese Antwort ändert nichts. Tags und Links .net c# code-contracts