2010-12-09 3 views

Antwort

25

möglich Wann immer. Zum Beispiel, dass überall würden Sie eine Schutzklausel zu Beginn eines Verfahrens wie

public void Write(TextWriter tw, object o) { 
    if(tw == null) { 
     throw new ArgumentNullException("tw"); 
    } 
    if(o == null) { 
     throw new ArgumentNullException("o"); 
    } 
    tw.WriteLine(o.ToString()); 
} 

verwenden Sie stattdessen

public void Write(TextWriter tw, object o) { 
    Contract.Requires(tw != null); 
    Contract.Requires(o != null); 
    tw.WriteLine(o.ToString()); 
} 

Was schön ist Contract verwenden sollten, ist, dass sie öffentlich werden und kann gemacht werden, Teil der Dokumentation ohne zusätzliche Arbeit Ihrerseits, wo die Wächterklausel nicht öffentlich war und nur mit schwerem Aufwand in die Dokumentation aufgenommen werden konnte. Daher können Sie mit Contract Anforderungen und Versprechen in Ihrem Code klarer ausdrücken.

+3

Zusätzlich zu den oben, wo Verträge verwendet werden, Voraussetzungen zu überprüfen, in ähnlicher Weise können sie verwendet werden um Nachbedingungen zu validieren - zum Beispiel nach der Ausführung von Teil-/vollständigen Methodenkörpern, um festzustellen, ob sich eine Variable/ein Objekt im korrekten Zustand befindet. Außerdem können Kontrakte auch statisch (zur Kompilierungszeit) ausgewertet werden. – VinayC

+0

@VinayC: Ja, das war es, was ich auch mit "deutlicher ausdrücklichen [...] Versprechen in Ihrem Code anspielte". Danke für die Ausarbeitung für mich. – jason

+0

+1 an euch beide; Ich hätte es nicht besser sagen können. – koenmetsu

5

was mit Verträgen wirklich schön ist, dass Sie nicht diese hässlichen Argument Name Strings harten Draht haben ...

if(tw == null) throw new ArgumentNullException("tw"); 
+0

Nun, Sie brauchen CC nicht, um diesen Code netter zu machen. Man könnte leicht eine Hilfsmethode à la 'Must.Be.NotNull (_ => someExpr) schreiben;' Es ist eine Frage der persönlichen Präferenz, die "netter" ist, also ist dies nicht der wirkliche Vorteil der Verwendung von CC. – stakx

Verwandte Themen