2010-12-14 91 views

Répondre

20

C# 4,0 introduit named arguments. Cette fonction vous permet d'identifier les arguments de la méthode par leur nom au lieu de leur position:

public void Foo(int bar, string quux) 
{ 
} 

// Before C# 4.0: 
Foo(42, "text"); 

// After C# 4.0: 
Foo(bar: 42, quux: "text"); 

// Or, equivalently: 
Foo(quux: "text", bar: 42); 

IntelliSense a été mis à jour pour cette fonctionnalité, c'est pourquoi son mécanisme d'autocomplétion offre maintenant deux choix lorsqu'un symbole accessible à partir de la portée actuelle a le même nom qu'un argument de méthode.

6

Ceci est probablement le cas lorsque vous définissez une valeur pour un paramètre lors de l'appel d'une méthode, ouais? En C# .NET 4, vous pouvez définir named parameters lors de l'appel d'une méthode. Cela supprime le besoin d'entrer vos paramètres dans un ordre déterminé.

private void MyMethod(int width, int height){ 
    // do stuff 
} 

//These are all the same: 
MyMethod(10,12); 
MyMethod(width: 10, height: 12); 
MyMethod(heigh: 12, width: 12); 
2

Ceci est une fonctionnalité très intéressante. il permet à votre code d'être plus tolérant aux changements d'ordre des paramètres ...

+0

et rend le code plus verbeux. Bien sûr, pour certaines personnes, plus la langue est sèche, mieux c'est, mais j'aime que le code soit aussi lisible que possible. –

+3

Mais il le rend moins tolérant aux changements de nom de paramètre ... –

+0

@Daniel Rose - Je préfère l'avoir moins tolérant pour nommer les changements. Si vous changez l'ordre de deux paramètres avec le même type ou des types compatibles, il compilera sans erreur, mais fonctionnera incorrectement. –

2

En plus de ce que les autres ont écrit: Le premier est une variable (locale) ou un champ, tandis que le dernier est le nom du paramètre de la méthode appelée. Dans le code:

private void MyFirstMethod(int myVar) 
{ 
    Console.WriteLine(myVar); 
} 

private void MySecondMethod(int myVar) 
{ 
    MyFirstMethod(myVar); // Call with the value of the parameter myVar 
    MyFirstMethod(myVar: myVar); // Same as before, but explicitly naming the parameter 

    MyFirstMethod(5); // Call with the value 5 
    MyFirstMethod(myVar: 5); // Same as before, but explicitly naming the parameter 
}