2011-09-01 14 views

Respuesta

6

Los métodos UpdateUI() y UpdateNetworkIndicator() son métodos personalizados de manejo de eventos.

El operador + = asocia estos manejadores de eventos a los eventos activados por la aplicación y NetworkChange, respectivamente.

= = denota una expresión lambda. Los (s, e) son parámetros de entrada (en este caso, el emisor estándar , eventos args) y el derecho de => es la declaración o expresión.

En este caso, se podría reescribir esto como:

app.InstallStateChanged += UpdateUI; 
NetworkChange.NetworkAddressChanged += UpdateNetworkIndicator; 

y debería funcionar igual de bien.

+0

¡Gracias a todos por su ayuda con esto! He marcado esta porque convierte lo confuso en algo que entiendo pero aprecio los otros comentarios que han mejorado mi comprensión. – Hunt

9

Esa es una expresión lambda.

"Todas las expresiones lambda uso, el usuario lambda =>, que se lee como 'va a'. El lado izquierdo del operador lambda especifica los parámetros de entrada (si existe) y el lateral derecho titular de la expresión o bloque de instrucciones. La expresión lambda x => x * x se lee "x va a x veces x".

http://msdn.microsoft.com/en-us/library/bb397687.aspx

1

InstallStateChanged y NetworkAddressChanged son eventos, viendo lo que eres es la sintaxis lambda para definir eventhandler para llamar a UpdateUI o UpdateNetworkIndicator si se disparan los eventos respectivos.

9

Este es un lambda expression que contiene múltiples parámetros. En este caso (ya que está utilizando la función para reemplazar un controlador de eventos) son equivalentes a los parámetros object y EventArgs.

Su código es equivalente a la de abajo

app.InstallStateChanged += OnInstallStateChanged; 
NetworkChange.NetworkAddressChanged += OnNetworkAddressChanged; 

/* ... */ 

private void OnInstallStateChanged(object s, EventArgs e) 
{ 
    UpdateUI(); 
} 

private void OnNetworkAddressChanged(object s, EventArgs e) 
{ 
    UpdateNetworkIndicator(); 
} 
+1

+1 Esta respuesta recibe mi voto. Establece el patrón apropiado para una respuesta de __bueno__ stackoverflow IMO. – AnthonyWJones

2

Considere este ejemplo

Button1.Click += (s, e) => log(e); 

es la mano corta (usando la expresión lambda) para

Button1.Click += new EventHandler(Button1_Click); 

y

void Button1_Click(object sender, EventArgs e) 
{ 
    log(e); 
} 
1

Esa sintaxis se llama Lambda Expression.A partir de MSDN,

Una expresión lambda es una función anónima que puede contener expresiones y declaraciones, y se puede utilizar para crear delegados o tipos de árboles de expresión.

Y el (s, e) declara los parámetros de entrada del delegado creado o del árbol de expresiones. Cuando hay un solo parámetro de entrada, los paréntesis no son necesarios y puede escribir simplemente s => .... Cuando hay más de un parámetro, se requieren paréntesis: (s, e) =>.

1

En resumen, s y e se refieren a los objetos cuyas propiedades está orientando la función. El código está expresando: tiene dos tipos de objetos a los que puede acceder en esta función. Cuando se invoca esta función, desde el objeto s obtenemos esta o aquella propiedad y usamos su valor de la siguiente manera.

Así, en un contexto hipotético

S es una cadena E es un int

(s, e) =>

Significa que más referencias en la función se refieren a los respectivos objetos tipos por los nombres s y e.

(s, e) => s.length + e

Medios: obtener el valor de la instancia de un texto al que se refiere y es añadir a la misma el valor de la instancia de un int a los que e se refiere.

Cuestiones relacionadas