2016-10-27 4 views
1

Ich bin dabei, ein neues C# -Projekt zu beginnen. Ich habe mich gefragt, was der Unterschied zwischen Code Contracts oder Code Analyzers (in Roslyn) ist. Missverstehe ich die Verwendung von jedem? Als neues Projekt möchte ich die Integrität des Codes beibehalten. Ich möchte also, dass andere Entwickler bestimmte Richtlinien befolgen. Ich werde weiter recherchieren, aber ich wollte zuerst die Meinung der Community bekommen. Entschuldigen Sie die Frage, ich bin noch ziemlich neu in C# Entwicklung.Code Contracts vs Code Analysatoren

Antwort

2

Sie sind zwei verschiedene Werkzeuge.

-Code Contracts ist eine Art und Weise zu erklären und überprüfen ... na ja, Verträge, wie Vorbedingungen und Post Bedingungen:

public class Foo 
{ 
    public Foo(object arg) 
    { 
     Contract.Requires<ArgumentNullException>(arg != null); 
    } 

    public object GetBar() 
    { 
     Contract.Ensures(Contract.Result<object>() != null); 

     // TODO: 
    } 
} 

CC ihre Bedingungen zur Laufzeit überprüfen. Dies erfordert, dass Ihre Assembly (kein Quellcode!) nach dem Kompilieren neu geschrieben wird, um entsprechende Aufrufe in Ihren Code zu injizieren.

Code Analyzer verwenden Roslyn zu analysieren Quellcode, während Sie es schreiben. Sie können Ihnen helfen, Code zu formatieren, Sie daran zu erinnern, Dispose auf IDisposable usw. aufzurufen, aber sie beeinflussen Laufzeitverhalten nicht direkt.

Es gibt eine Reihe von Analysatoren, die nach Zweck in Projekten gruppiert sind (wie StyleCopAnalyzers), während Code Contracts ein eigenständiges Projekt ist.

(CC haben auch statische Analysator, aber ich kann nicht viel hier sagen - es tötet Leistung, wenn auf realen Projekten verwendet, so ist es für mich in der Regel ausgeschaltet. Wie auch immer, es ist beabsichtigt, Verträge zu überprüfen.)

+0

danke dafür. Also beeinflussen Code Contracts die Performance? –

+1

Wenn Sie mehr über Code Contracts lesen möchten, überprüfen Sie dieses E-Buch https://www.syncfusion.com/resources/techportal/details/ebooks/csharpcontracts –

+1

@JonMeyers: CC wird Zeit zum Erstellen von Projekt wegen Neuschreiben erhöhen . Bei Laufzeitverträgen sind die Verträge langsamer als "wenn ...", aber ich bezweifle, dass Sie den Unterschied in den meisten Fällen sehen werden. Gleichzeitig ergeben sich signifikante Vorteile durch die Verwendung von CC. – Dennis

1

Code-Analysatoren analysieren Ihren Code auf häufige Fehler. Sie betrachten die Struktur des Codes und den Datenfluss, um Probleme zu erkennen.

Eine andere Art von Analysatoren befasst sich mit dem Stil (StyleCop zum Beispiel), Großbuchstaben, Camel Gehäuse, Präfixe, Postfixes und was hast du.

Der dritte Typ sind die Code-Verträge, die Sie erwähnt haben, und das funktioniert etwas anders. Sie deklarieren das erwartete Verhalten Ihres Codes, z. B. was von Parametern erwartet wird, die an eine Methode übergeben werden, welche Ausnahmen Ihr Code auslösen kann usw. Der contracts-Analyzer prüft dann, ob der Aufrufcode die richtigen Parameter liefert (z. B. der Analyzer erkennt) Sie übergeben Null und wird einen Fehler auslösen, wenn das nicht erlaubt ist). Gleichzeitig überprüft es die "interne Konsistenz" Ihrer Methoden, um sicherzustellen, dass Sie keine Ausnahmen werfen, die Sie nicht auslösen dürfen. Abhängig von der Implementierung können Verträge zur Laufzeit oder zur Kompilierzeit validiert werden.

Verwandte Themen