Frage

Könnte ich mit CodeContracts statt starten:

if (XXX == Y)
    throw new ArgumentException("bla bla");

Wie funktioniert es, wenn ich eine Bibliothek und meine Bibliotheksbenutzer nicht entwickeln CodeContracts verwenden?

War es hilfreich?

Lösung

Unter der Annahme, dass der Code Code Verträge mit durch die binäre rewriter ausgeführt wird, wird es Ausnahmen wie Code werfen Sie auf dem Laufenden. Die Wieder Schriftsteller geht durch den Code und ersetzt den Vertrag Code mit dem Argument usw. Überprüfung Es ist ein bisschen wie aspektorientierte Programmierung. Es injiziert Code Handle Situationen für Sie, nachdem Sie es kompiliert haben.

Wenn sie sie nicht-Code Verträge verwenden, nicht den Nutzen der durchgeführten statischen Analyse, die im Vertrag suchen entworfen und sie zu warnen, sie könnten einen Fehler auf der Grundlage des Vertrags und ihren Code.

-Code Contracts

Andere Tipps

Auf den Punkt gebracht: Es ist möglich, Schreib Aussagen wie diese

Contract.Requires<ArgumentNullException>(argumentToCheck, "argumentToCheck");

Wenn Sie die Runtime-Checker in Ihrer Build-Konfiguration aktivieren, wird die rewriter umschreiben Voraussetzungen wie diese zu einem gewöhnlichen Argumente.

Aufrufer des Codes wird ein Argument gezeigt werden, oder was auch immer Ausnahme Sie bieten, unabhängig davon, ob sie haben Code Contracts installiert.

Ich habe Code Verträge wurden mit und für den gelegentlichen Gebrauch, sie adressieren 2-Code Probleme für mich, die nicht schön Lösungen hatte früher:

  • Überprüfen Rückgabewert Überprüfung
  • Invarianten erscheint eine schlecht genannt kombinierten Parameterprüfung / Eintrittspunkt und Rückgabewert / Austrittspunkt Behauptung zu sein.

Ich konnte eine temporäre Variable für den Rückgabewert deklarieren und behaupten einige Dinge vor der Rückkehr, aber es ist zusätzliche Reibung.

Überprüfen Parameter war bereits eine Lösung. Throw Argument

Code-Verträge fügt eine kleine Sache zu ArgumentException-- es macht Sie Argumente sehr früh prüfen, was meiner Meinung nach eine gute Sache ist.

Es ist viel mehr los, Code Contracts, aber ich habe gerade in meine Zehe getaucht und ich habe nicht die Ausgabe, die super umfassende statische Kontrollen der Fall ist. Ich plane meinen Weg zur Arbeit bis zu mit Code Contracts mehr vollständig, und sobald ich SO- es eleganter getan wird Parameter überprüfen den gleichen Rahmen anstelle zurück Vermittlungs- und her zwischen-Code Contracts und if / then / throw Argument

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top