5 Stimmen

Optionales Argument Code kompiliert in .NET 3.5. Warum?

Dieses Stück Code kompiliert OK in VS 2010 in einem Framework 3.5-Projekt (ich dreifach überprüft, dass)

    public LoggingClient(string uri = "net.msmq://localhost/logging"){...}

Und warum? Ich sehe nichts in der C# 4 Spezifikation ( Doc-Version ), Abschnitt 21.1, der besagt, dass dies abwärtskompatibel sein sollte. Wie kommt es, dass ich keinen Kompilierungsfehler erhalte? Wird dies unter bestimmten Umständen unbemerkt fehlschlagen?

8voto

Hans Passant Punkte 894572

Projekt + Eigenschaften, Registerkarte Erstellen, nach unten scrollen, Erweitert. Sie können die Sprachversion auf "C# 3.0" ändern, wenn Sie die Kompatibilität des Quellcodes aufrechterhalten möchten.

Aber ja, Sie verwenden den C# 4.0-Compiler in VS2010, unabhängig von der Ziel-.NET-Version, die Sie verwenden. Die Ausgabe des Compilers, IL, hat sich in .NET 4.0 nicht geändert. Nein, Sie können nicht verwenden dynamisch Es wird eine Assembly benötigt, die nur .NET 4.0 unterstützt (Microsoft.CSharp.dll).

3voto

Anon. Punkte 55933

Optionale Parameter sind lediglich syntaktischer Zucker - wenn Sie sie nicht an der Aufrufstelle angeben, füllt der Compiler sie mit dem Standardwert. Es besteht keine Abhängigkeit vom .NET-Framework selbst, um etwas zu tun.

Siehe auch Können Sie optionale Parameter in Code verwenden, der auf .NET 3.5 ausgerichtet ist?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X