2010-12-14 10 views

Respuesta

20

C# 4.0 introducido named arguments. Esta característica le permite identificar los argumentos del método por sus nombres en lugar de su posición:

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 ha sido actualizado para soportar esa característica, por lo que su mecanismo de terminación automática ahora ofrece dos opciones cuando un símbolo accesible desde el ámbito actual tiene el mismo nombre que un argumento de método.

6

Esto es probablemente cuando se establece un valor para un parámetro al llamar a un método, ¿sí? En C# .NET 4, puede establecer named parameters al llamar a un método. Esto elimina la necesidad de tener que ingresar sus parámetros en un orden establecido.

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

esta es una característica muy interesante. permite que su código sea más tolerante a los cambios de orden de parámetros ...

+0

y hace que el código sea más detallado. por supuesto, para algunas personas, cuanto más seco sea el idioma, mejor, pero me gusta que el código sea lo más legible posible. –

+3

Pero lo hace menos tolerante a los cambios de nombre de parámetro ... –

+0

@Daniel Rose - Prefiero que sea menos tolerante a los cambios de nombre. Si cambia el orden de dos parámetros con los mismos o compatibles, se compilará sin error, pero funcionará incorrectamente. –

2

Además de lo que escribieron los demás: El primero es una variable (local) o campo, mientras que el último es el nombre del parámetro de el método llamado. En el código:

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 
} 
Cuestiones relacionadas