Le mot-clé event
est un modificateur de portée pour les délégués multidiffusion. Les différences pratiques entre cette méthode et la simple déclaration d'un délégué multidiffusion sont les suivantes :
- Vous pouvez utiliser
event
dans une interface.
- L'accès aux invocations du délégué multidiffusion est limité à la classe déclarante. Le comportement est le même que si le délégué était privé pour l'invocation. Pour les besoins de l'affectation, l'accès est tel que spécifié par un modificateur d'accès explicite (ex.
public event
).
A titre d'information, vous pouvez postuler +
y -
aux délégués de la multidiffusion, et c'est la base de la +=
y -=
pour l'affectation combinée de délégués à des événements. Ces trois extraits sont équivalents :
B = new EventHandler(this.MethodB);
C = new EventHandler(this.MethodC);
A = B + C;
Deuxième exemple, illustrant l'affectation directe et l'affectation combinée.
B = new EventHandler(this.MethodB);
C = new EventHandler(this.MethodC);
A = B;
A += C;
Troisième exemple : une syntaxe plus familière. Vous êtes probablement familier avec l'affectation de null pour supprimer tous les gestionnaires.
B = new EventHandler(this.MethodB);
C = new EventHandler(this.MethodC);
A = null;
A += B;
A += C;
Comme les propriétés, les événements ont une syntaxe complète que personne n'utilise jamais. Ceci :
class myExample
{
internal EventHandler eh;
public event EventHandler OnSubmit
{
add
{
eh = Delegate.Combine(eh, value) as EventHandler;
}
remove
{
eh = Delegate.Remove(eh, value) as EventHandler;
}
}
...
}
...fait exactement la même chose que ça :
class myExample
{
public event EventHandler OnSubmit;
}
Les méthodes add et remove sont plus visibles dans la syntaxe plutôt guindée qu'utilise VB.NET (pas de surcharges d'opérateurs).