ich wurde durch eine Frage auf SO geht die Antwort über new features of c# 4.0 und jon Skeet war, hatte-Code Contracts Funktion von C# 4.0 .. aber ich kann nicht wirklich verstehen, wenn sie zu benutzen .. Jede Vorschlag ...Wann sollte man Code-Verträge verwenden, die mit C# 4.0 geliefert werden?
Antwort
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.
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");
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
- 1. Wird .NET 4.0 mit Microsoft.Jet.OLEDB.4.0 geliefert?
- 2. Wann sollte die Spark DataFrame/Dataset API verwendet werden und wann sollte man RDD verwenden?
- 3. Wann sollte ich die using-Anweisung verwenden?
- 4. Wann sollte FOUNDATION_EXPORT verwendet werden?
- 5. Wann sollte man Nullable-Typen in C# verwenden?
- 6. Wann sollte ich LINQ für C# verwenden?
- 7. Wann sollte man "an" und "hasMany" verwenden?
- 8. Wann sollte die didMoveToWindow-Methode verwendet werden?
- 9. Wann sollte WS_EX_NOREDIRECTIONBITMAP verwendet werden?
- 10. In Objective-C, wann sollte ich Klassenmethoden verwenden und wann sollte ich Instanzmethoden verwenden?
- 11. Wann sollte $ .extend ({...}) verwendet werden?
- 12. Wann sollte die Ausnahme behandelt werden?
- 13. Wann sollte StringBuilder verwendet werden?
- 14. Wann sollte ich die ACCESS_COARSE_LOCATION-Berechtigung verwenden?
- 15. Wann sollte wkWebView verwendet werden?
- 16. Wann sollte Flask.g verwendet werden?
- 17. Wann sollte ich Threads verwenden?
- 18. Wann sollte IDisposable implementiert werden?
- 19. Wann sollte ich RESTful verwenden?
- 20. Wann sollte ich eine Plattform wie OSGI verwenden und wann sollte es vermieden werden?
- 21. Wann sollte ein Singleton verwendet werden?
- 22. Wann sollte ich getElementById verwenden?
- 23. Wann sollte range.value verwendet werden?
- 24. Wann sollte ich ConcurrentSkipListMap verwenden?
- 25. Wann sollte dynamic_cast der Referenz verwendet werden?
- 26. Wann sollte die Zeitüberschreitung der Ergebnisse automatisch beendet werden?
- 27. Ziel C - wann sollte "typedef" vor "enum" stehen, und wann sollte eine enum benannt werden?
- 28. Wann sollte man dup verwenden und wann sollte ich in Ruby klonen?
- 29. In Jira Agile wann sollte ich eine "Story" verwenden und wann sollte ich eine "Verbesserung" verwenden?
- 30. Wann sollte Funktionsreferenz anstelle von Funktionszeiger in C++ verwendet werden?
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
@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
+1 an euch beide; Ich hätte es nicht besser sagen können. – koenmetsu