2010-03-04 5 views

Répondre

7

Cela peut rendre un peu plus clair, tout en renommant:

this.Loaded += (sender, args) => this.loaded = true; 

Ou en leur donnant des types:

this.Loaded += (object sender, EventArgs args) => this.loaded = true; 

Ce sont les paramètres du délégué. Voici l'équivalent en C# 2:

this.Loaded += delegate (object sender, EventArgs args) { this.loaded = true; }; 

Cela aide-t-il?

est ici l'équivalent en C# 1 (heureusement, il n'y a pas de variables capturées, ce qui rend la vie un peu plus facile ...)

this.Loaded += new EventHandler(SetLoadedToTrue); 

... 

private void SetLoadedToTrue(object sender, EventArgs args) 
{ 
    this.loaded = true; 
} 

(C'est tout en supposant l'événement Loaded est de type EventHandler, si ce n'est pas , la signature serait différente de manière évidente.)

+0

Donnez-moi une chance :-)) – AxelEckenberger

+0

Ahhh, mr. Skeet, pourquoi je m'ennuie même à répondre à des questions C# lorsque vous êtes en ligne ;-) –

+0

(Était en train de taper presque exactement cela dans une réponse, mais Jon Skeet> moi) Pour répondre à la question originale: tout comme les noms des les paramètres de SetLoadedToTrue ("expéditeur" et "args") sont eux-mêmes des déclarations variables qui n'apparaissent pas ailleurs dans le code du site d'appel, les "s" et "e" dans la déclaration lambda sont également déclarés pour la portée du lambda . – Tanzelax

0

C'est un raccourci pour un gestionnaire d'événements. s est ce que vous voyez normalement comme object sender et e est un certain type de EventArgs. Fondamentalement, il pourrait être écrit comme ceci:

public void MyHandler(object sender, EventArgs e) 
{ 
    this.loaded = true; 
} 

et le code d'appel serait quelque chose comme:

this.Loaded += MyHandler;