2010-07-09 7 views
5

Dieses Stück Code in VS 2010 in einem Framework 3.5 Projekt OK kompiliertOptionaler Argumentcode wird in .NET 3.5 kompiliert. Warum?

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

(ich das Dreifache überprüft) Warum? Ich sehe nichts in der C# 4 Spezifikation (doc version), Abschnitt 21.1, die besagt, dass dies rückwärtskompatibel sein sollte. Wie kommt es, dass ich keinen Kompilierungsfehler bekomme? Wird dies unter bestimmten Umständen still ausfallen?

+0

mögliche Duplikat von [Können Sie optionale Parameter in Code Targeting .NET 3.5 verwenden? ] (http://stackoverflow.com/questions/1210679/can-you-use-optional-parameters-in-code-targeting-net-3-5) –

+0

Im Allgemeinen gibt es keine Beziehung zwischen der C# Sprachversion und die .NET-Version. –

Antwort

8

Project + Eigenschaften, auch Registerkarte Erstellen, nach unten scrollen, Erweitert. Sie können die Sprachversion auf "C# 3.0" ändern, wenn Sie die Quellcode-Kompatibilität beibehalten 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 wurde in .NET 4.0 nicht geändert. Nein, Sie können nicht verwenden dynamische, erfordert eine .NET 4.0 nur Unterstützung Assembly (Microsoft.CSharp.dll)