2011-09-01 16 views

risposta

6

Entrambi i metodi UpdateUI() e UpdateNetworkIndicator() sono metodi di gestione eventi personalizzati.

L'operatore + = collega questi gestori di eventi agli eventi attivati ​​rispettivamente dall'app e NetworkChange.

Il => indica un'espressione lambda. I (s, e) sono parametri di input (in questo caso, il mittente standard , gli argomenti evento) e il diritto di => è l'istruzione o espressione.

In questo caso, si potrebbe riscrivere questo come:

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

e dovrebbe funzionare altrettanto bene.

+0

Grazie a tutti per il vostro aiuto con questo! Ho notato questo perché converte la confusione in qualcosa che capisco, ma apprezzo gli altri commenti che hanno migliorato la mia comprensione. – Hunt

9

Questa è un'espressione lambda.

"Tutte le espressioni lambda utilizzare l'operatore lambda =>, che viene letto come 'va a'. La parte sinistra dell'operatore lambda specifica i parametri di ingresso (se presente) e il lato destro contiene l'espressione o blocco di istruzioni. L'espressione lambda x => x * x si legge "x va a x volte x."

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

1

InstallStateChanged e NetworkAddressChanged sono eventi, ciò che tu sei vedendo è la sintassi lambda per definire eventhandler per chiamare UpdateUI o UpdateNetworkIndicator se vengono attivati ​​i rispettivi eventi.

9

Questo è un lambda expression che contiene più parametri. In questo caso (dato che stai utilizzando la funzione per sostituire un gestore di eventi) sono equivalenti ai parametri object e EventArgs.

Il codice è equivalente al di sotto

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

/* ... */ 

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

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

+1 Questa risposta ottiene il mio voto. Imposta il modello appropriato per una risposta di stackoverflow __good__ IMO. – AnthonyWJones

2

Si consideri l'esempio

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

è la mano breve (utilizzando un'espressione lambda) per

Button1.Click += new EventHandler(Button1_Click); 

e

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

Questa sintassi è denominata Lambda Expression.Da MSDN,

Un'espressione lambda è una funzione anonima che può contenere espressioni e dichiarazioni, e può essere utilizzato per creare delegati o tipi di alberi di espressione.

E il (s, e) dichiara i parametri di input del delegato o dell'albero delle espressioni creato. Quando c'è un solo parametro di input, le parentesi non sono necessarie e puoi scrivere solo s => .... Quando sono presenti più di un parametro, sono necessarie le parentesi - (s, e) =>.

1

In breve, la s e e si riferiscono agli oggetti le cui proprietà è rivolta alla funzione. Il codice sta esprimendo: hai due tipi di oggetti a cui puoi accedere in questa funzione. Quando questa funzione è invocata, dall'oggetto s ottiene questa o quella proprietà e ne usa il valore nel modo seguente.

Quindi, in un ipotetico contesto

S è una stringa E è un int

(s, e) =>

Significa che ulteriori riferimenti nella funzione si riferiscono a quelle rispettivo oggetto tipi con i nomi s ed e.

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

Metodo: ottenere il valore della istanza di una stringa a cui si riferisce s ed aggiungere ad esso il valore dell'istanza di un int a cui e si riferisce.