FAQ ASP.NET/C#
FAQ ASP.NET/C#Consultez toutes les FAQ
Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 15 juin 2021
Générer un évènement:
D'abord il faut créer les argument de l'événement :
public
class
MyEventArgs :
EventArgs
{
// readonly permet de verouiller les arguments apres le constructeur
private
readonly
bool
myArg1 ;
private
readonly
int
myArg2;
//Constructeur
public
MyEventArgs
(
bool
Arg1,
int
Arg2)
{
this
.
myArg1 =
Arg1;
this
.
myArg2 =
Arg2;
}
public
int
Arg2
{
get
{
return
myArg2;
}
}
public
bool
Arg1
{
get
{
return
myArg1;
}
}
}
Il faut aussi un délégué pour typer l'évènement
public
delegate
void
MyEventHandler
(
object
sender,
MyEventArgs e);
Ensuite il faut créer l'évenement et déclencher les delegates inscrits dans l'événement de la classe émétrice :
public
class
MyClass
{
//.....
public
event
MyEventHandler MyEvent;
// la méthode protégé surchargeable OnMyEvent invoque les délégués.
// L'emeteur (Sender) est toujours "this", l'instance courante de la classe.
protected
virtual
void
OnMyEvent
(
MyEventArgs e)
{
if
(
MyEvent !=
null
)
{
// invoque les délégués de l'événement.
MyEvent
(
this
,
e);
}
}
}
Pour déclencher l'évenement à partir d'une methode de la classe émétrice :
// bool bolMaValeur;
// int intMaValeur;
OnMyEvent
(
new
MyEventArgs
(
bolMaValeur,
intMaValeur));
Consommer un évènement
Enfin il faut créer et inscrire un délégué dans l'évènement pour que celui-ci soit appelé par la classe émétrice
class
Main
{
MyClass mc =
new
MyClass
(
);
public
Main
(
)
{
// on assigne notre delegate a l'événement de l'objet
mc.
MyEvent +=
new
MyEventHandler
(
this
.
MyDelegate);
}
public
void
MyDelegate
(
object
Sender,
MyEventArgs e)
{
// traitement a effectuer
}
}
Remarques
- Un évènement est TOUJOURS multicast, on peut lui faire contenir plusieurs délégués.
- On ne peut pas changer les délégués contenus dans un évènement depuis du code extérieur à la classe émétrice si on ne connait pas le nom du délégué. La cause en est la méthode OnEvent qui masque le délégué EventHandler associé ce qui nous empeche d'obtenir la méthode GetInvocationList() du délégué associé à l'évènement.