2010-07-09 9 views
5

Ce morceau de code se compile bien dans VS 2010 dans un cadre 3.5 projet (I triple vérifié que)Le code d'argument facultatif est compilé dans .NET 3.5. Pourquoi?

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

Pourquoi? Je ne vois rien dans la spécification C# 4 (doc version), section 21.1, qui dit que cela devrait être rétrocompatible. Comment se fait-il que je ne reçoive aucune erreur de compilation? Est-ce que cela échouera silencieusement dans certaines circonstances?

+0

duplication possible de [Pouvez-vous utiliser les paramètres facultatifs dans le ciblage de code .Net 3.5? ] (http://stackoverflow.com/questions/1210679/can-you-use-optional-parameters-in-code-targeting-net-3-5) –

+0

En général, il n'y a pas de relation entre la version en langage C# et la version .NET. –

Répondre

8

projet + Propriétés, onglet Construire, faites défiler vers le bas, Avancé. Vous pouvez remplacer la version de langue par "C# 3.0" si vous préférez conserver la compatibilité du code source.

Mais oui, vous utilisez le compilateur C# 4.0 dans VS2010, quelle que soit la version .NET que vous utilisez. La sortie du compilateur, IL, n'a pas changé dans .NET 4.0. Non, vous ne pouvez pas utiliser dynamique, il nécessite un support .NET 4.0 seulement support assembly (Microsoft.CSharp.dll)

3

Les paramètres optionnels sont simplement du sucre syntaxique - si vous ne le spécifiez pas sur le site d'appel, le compilateur remplit la valeur par défaut. Il n'y a aucune dépendance sur le framework .NET pour faire quoi que ce soit.

Voir aussi Can you use optional parameters in code targeting .NET 3.5?