Quelqu'un pourrait-il écrire ce code:this.Loaded + = (s, e) => this.loaded = true ;?
this.Loaded + = (s, e) => this.loaded = true;
en plusieurs lignes de code afin que je puisse retracer le sens?
Dans mon exemple de code, il n'y a pas s ou et?
Quelqu'un pourrait-il écrire ce code:this.Loaded + = (s, e) => this.loaded = true ;?
this.Loaded + = (s, e) => this.loaded = true;
en plusieurs lignes de code afin que je puisse retracer le sens?
Dans mon exemple de code, il n'y a pas s ou et?
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.)
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;
Donnez-moi une chance :-)) – AxelEckenberger
Ahhh, mr. Skeet, pourquoi je m'ennuie même à répondre à des questions C# lorsque vous êtes en ligne ;-) –
(É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