2010-08-30 7 views
11

Ceci est, probablement, une réponse très simple pour quelqu'un. J'ai une méthode avec un Optional Parameter comme ça;C# Paramètres par défaut

public static Email From(string emailAddress, string name = "") 
    { 
     var email = new Email(); 
     email.Message.From = new MailAddress(emailAddress, name); 
     return email; 
    } 

Maintenant, je dois cibler .Net 3.5 et ai cru comprendre que Optional Parameters font partie de .Net 4. Cependant, mon projet construit et je revérifié les Propriétés - Demande 3.5 page qui décrit comme cadre cible. Ensuite, j'ai trouvé un article sur MSDN disant que c'est une caractéristique de C# 4 dans VS2010. (MSDN Article ->Named and Optional Arguments)

Quelqu'un peut-il aider à clarifier cela pour moi. C# 4 ne nécessite pas .Net4? Quels sont les paramètres optionnels en partie?

Merci.

Répondre

22

Les paramètres facultatifs ont été pris en charge dans le CLR depuis la version 1.0. Des langages comme VB.Net les utilisent depuis le début. Alors que la première version de C# pour les supporter est 4.0, elle peut quand même générer du code valide pour un CLR 2.0 et en fait le fait. Par conséquent, vous pouvez utiliser les paramètres par défaut en 2010 si vous ciblez le CLR 3.5 (ou 2.0, 3.0, etc ...)

Ce type de soutien ne se limite pas aux paramètres par défaut. De nombreuses nouvelles fonctionnalités C# peuvent être utilisées sur une ancienne version du framework car elles ne reposent pas sur les modifications CLR. Voici quelques autres qui sont pris en charge sur les versions CLR 2.0 et au-dessus

  • arguments nommés: Ajout C# 4.0
  • Lambda Expressions: Ajout C# 3.0
  • Propriétés Auto: Ajout C# 3.0
  • Méthodes d'extension: Ajout C# 3.0
  • Co/Contra variance: Ajout C# 4,0
+1

existe-t-il d'autres options de VS2010 qui peuvent être appliquées à .NET 3.5 de la même manière? –

+1

@Yuriy a ajouté un peu plus. – JaredPar

+0

Comment l'EDI accomplit-il cela? J'ai regardé le dossier de CSC et ne peux pas trouver un argument qui spécifie à quelle version construire. –

-1

C# 4.0 est inclus avec Visual Studio 2010, et le compilateur C# comprend des paramètres facultatifs. Donc oui, la définition du langage C# 4.0 est quelque chose de différent de .NET 4.0. Je suppose qu'une méthode avec des paramètres facultatifs compilés pour .NET 3.5 montrera des méthodes surchargées lors de l'ouverture avec par exemple. VS 2008

+1

Non, les paramètres facultatifs ne morph pas en méthodes surchargées - comme le dit JaredPar, le CLR a pris en charge les paramètres facultatifs depuis la version 1.0. –

5

Si vous compilez que et examinez la sortie à l'aide d'un outil comme ILDASM you'l Je vois que le paramètre optionnel est simplement implémenté en ajoutant un attribut aux métadonnées qui décrivent les paramètres formels de la méthode. Tant que cette classe d'attribut est disponible sur la plate-forme cible, il ne devrait pas y avoir de problème avec l'utilisation du code émis sur une plateforme de niveau inférieur.

2

La version est indépendante de la version du framework. Pour C#, ils s'exécutent principalement en parallèle, c.-à-d. C# 4 et framework 4.0 avec Visual Studio 2010. (Cependant, il n'y a pas de version 3.5 de C#.)

Avec VB, les numéros de version sont différents, car VB 7 était le première version de VB.NET. Donc, VB 10 vient en même temps que le framework 4.0. Les paramètres facultatifs sont une fonctionnalité de langage introduite dans C# 4. Lorsque vous utilisez VS 2010, vous utilisez C# 4, même si vous ciblez Framework 2.0, de sorte que vous pouvez utiliser toutes les fonctionnalités C# 4.

+2

À moins que les fonctionnalités que vous utilisez nécessitent des types qui n'existaient pas dans la structure 2.0. Si le compilateur ne trouve pas une implémentation des classes DLR alors vous ne pouvez pas utiliser "dynamic" par exemple. –

Questions connexes