2011-03-10 18 views
26

He empezado a notar a veces cuando estoy haciendo llamadas de método en C# que los nombres de los parámetros para el método que estoy llamando aparecerán en la lista intellisense adjuntada con dos puntos, y que luego puedo formatear el método call así:llamada de método C# con nombre de parámetro y dos puntos

MethodCall(parameter1:value1, parameter2:value2); 

¿Es esta una nueva función de idioma? Me recuerda a la forma en que se puede llamar a procedimientos almacenados en SQL y especificar nombres de los parámetros de este modo:

spDoSomeStuff @param1 = 1, @param2 = 'other param' 

¿Es esta una característica similar? Si es así, ¿con qué fin? Si no, ¿qué es y para qué sirve?

Respuesta

31

Es una característica nueva. Vea aquí: http://msdn.microsoft.com/en-us/library/dd264739.aspx Los parámetros con nombre son estándar en ObjectiveC, por ejemplo. Lleva un tiempo acostumbrarse a ellos, pero son algo bueno. Solo mirando puede decir para qué sirve un parámetro.

+7

puedo ver una gran cantidad de valor en tener la nombre del parámetro inmediatamente visible sin tener que navegar a la definición del método o dejar que intellisense le diga cuáles son todos. – Zannjaminderson

16

parámetros con nombre permiten que se establece explícitamente el valor de argumentos en una pedido personalizado independiente de la firma. Las firmas de método están definidas por los tipos de argumento, es decir, Foo (int i, bool b), que solo aceptará argumentos de tipo int y bool en ese orden. Los argumentos con nombre le permiten pasar b primero y yo segundo.

+1

Estoy familiarizado con el concepto de la firma de un método y me pregunté si esto le permitiría cambiar el orden de los parámetros en su llamada. Aunque tengo curiosidad: ¿de qué sirve cambiar el orden? – Zannjaminderson

+1

Es solo una preferencia de "legibilidad" de código. La firma del método es estática en el sentido de que cuando se llame, los argumentos se colocarán en la pila en el orden en que se definieron en la firma del método. La función "Argumentos nombrados" solo le permite reorganizar los argumentos a su preferencia. –

+3

@Zannjaminderson Para mí, el valor real viene cuando tienes métodos con muchos valores predeterminados. Si solo necesita cambiar algunos de ellos, puede seleccionarlos usando parámetros nombrados. De esta forma, no tiene que volver a establecer todos los valores predeterminados que preceden al que desea cambiar. –

9

Vale la pena mencionar, a diferencia de los parámetros opcionales, puede omitir ciertos argumentos y pasar sólo los parámetros que le interesan.

public void Example(int required, string StrVal = "default", int IntVal = 0) 
{ 
    // ... 
} 

public void Test() 
{ 
    // This gives compiler error 
    // Example(1, 10); 

    // This works 
    Example(1, IntVal:10); 
} 
0

@Krumelur dijo que "Los parámetros con nombre son estándar en ObjectiveC por ejemplo."

Eso no es realmente correcto. Objective-C utiliza una notación infija, por lo que este mensaje de llamada:

[foo setRed:255 Green:255 Blue:0]; 

es el setRed: Verde: Azul: mensaje (incluyendo los dos puntos!) Con los argumentos (255,255,0) intercaladas dentro del mensaje nombre.

Aunque, concedido, a primera vista, la sintaxis de Objective-C da la apariencia de que Objective-C usa parámetros con nombre. Pero eso no es realmente correcto, y no entender la diferencia puede ser un impedimento para aprender Objective-C.

(Me hubiera respondido en un comentario, pero de alguna manera perdido todos mis puntos de reputación y estoy empezando de nuevo. Drat. C'est la vie.)

Cuestiones relacionadas