achref el mouelhi - lis lab · 2020. 7. 26. · c#: del´ egu´ e et´ ev´ enement` achref el...
TRANSCRIPT
![Page 1: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/1.jpg)
C# : delegue et evenement
Achref El Mouelhi
Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)
Ingenieur en genie logiciel
H & H: Research and Training 1 / 13
![Page 2: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/2.jpg)
Plan
1 Delegate
2 Event
H & H: Research and Training 2 / 13
![Page 3: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/3.jpg)
© Achref EL MOUELHI ©
Delegate
Delegate
Les delegues en C#
Concept inspire par les pointeurs de fonction en C et C++.
Represente des references aux methodes avec une signaturebien definie
Declare avec le mot cle delegate.
Toute methode respectant cette signature peut etre appelee par lebiais du delegue.
H & H: Research and Training 3 / 13
![Page 4: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/4.jpg)
© Achref EL MOUELHI ©
Delegate
DelegateConsiderons la methode suivante
public static void DireBonjour(string nom){
Console.WriteLine($"Bonjour {nom}");}
Pour executer cette methode
static void Main(string[] args){
DireBonjour("Wick"); // affiche Bonjour WickConsole.ReadKey();
}
QuestionComment confier cette mission a un delegue?
H & H: Research and Training 4 / 13
![Page 5: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/5.jpg)
© Achref EL MOUELHI ©
Delegate
DelegateConsiderons la methode suivante
public static void DireBonjour(string nom){
Console.WriteLine($"Bonjour {nom}");}
Pour executer cette methode
static void Main(string[] args){
DireBonjour("Wick"); // affiche Bonjour WickConsole.ReadKey();
}
QuestionComment confier cette mission a un delegue?
H & H: Research and Training 4 / 13
![Page 6: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/6.jpg)
© Achref EL MOUELHI ©
Delegate
Delegate
Creer un delegue
public delegate void PremierDelegate(string s);
Declarer un delegue
PremierDelegate d;
Creer une instance du delegue
d = new PremierDelegate(DireBonjour);
Appeler la methode DireBonjour a travers le delegue
d("Bob"); // affiche Bonjour Bob
On peut aussi faire la meme chose de deux facons differentes
H & H: Research and Training 5 / 13
![Page 7: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/7.jpg)
© Achref EL MOUELHI ©
Delegate
Delegate
Creer un delegue
public delegate void PremierDelegate(string s);
Declarer un delegue
PremierDelegate d;
Creer une instance du delegue
d = new PremierDelegate(DireBonjour);
Appeler la methode DireBonjour a travers le delegue
d("Bob"); // affiche Bonjour Bob
On peut aussi faire la meme chose de deux facons differentesH & H: Research and Training 5 / 13
![Page 8: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/8.jpg)
© Achref EL MOUELHI ©
Delegate
DelegateOn peut faire aussi
PremierDelegate d;
d = DireBonjour;
d("Bob");
Ou encore en utilisant les methodes anonymes
PremierDelegate d;
d = delegate (string nom){
DireBonjour(nom);};
d("Bob");
H & H: Research and Training 6 / 13
![Page 9: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/9.jpg)
© Achref EL MOUELHI ©
Delegate
DelegateOn peut faire aussi
PremierDelegate d;
d = DireBonjour;
d("Bob");
Ou encore en utilisant les methodes anonymes
PremierDelegate d;
d = delegate (string nom){
DireBonjour(nom);};
d("Bob");
H & H: Research and Training 6 / 13
![Page 10: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/10.jpg)
© Achref EL MOUELHI ©
Delegate
Exemple avec plusieurs methodes
public static void Somme (int a, int b){
Console.WriteLine(a + b);}public static void Produit(int a, int b){
Console.WriteLine(a * b);}public static void Soustraction(int a, int b){
Console.WriteLine(a - b);}public static void Division(int a, int b){
Console.WriteLine(a / b);}
H & H: Research and Training 7 / 13
![Page 11: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/11.jpg)
© Achref EL MOUELHI ©
Delegate
DelegateDeclarer un delegue
public delegate void Calcul(int x, int y);
Utiliser le delegue
Calcul calcul;
calcul = Somme;calcul(7, 5);
calcul = Produit;calcul(7, 5);
calcul = Division;calcul(7, 5);
calcul = Soustraction;calcul(7, 5);
Trop long ?
H & H: Research and Training 8 / 13
![Page 12: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/12.jpg)
© Achref EL MOUELHI ©
Delegate
DelegateDeclarer un delegue
public delegate void Calcul(int x, int y);
Utiliser le delegue
Calcul calcul;
calcul = Somme;calcul(7, 5);
calcul = Produit;calcul(7, 5);
calcul = Division;calcul(7, 5);
calcul = Soustraction;calcul(7, 5);
Trop long?H & H: Research and Training 8 / 13
![Page 13: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/13.jpg)
© Achref EL MOUELHI ©
Delegate
Delegate
Solution : utiliser le multicast
Calcul calcul;
calcul = Somme;calcul = calcul + Produit + Division + Soustraction;
calcul(7, 5);
Pour connaıtre le nombre de methodes abonnees a notre delegue
Console.WriteLine(calcul.GetInvocationList().Length);
H & H: Research and Training 9 / 13
![Page 14: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/14.jpg)
© Achref EL MOUELHI ©
Delegate
Delegate
Solution : utiliser le multicast
Calcul calcul;
calcul = Somme;calcul = calcul + Produit + Division + Soustraction;
calcul(7, 5);
Pour connaıtre le nombre de methodes abonnees a notre delegue
Console.WriteLine(calcul.GetInvocationList().Length);
H & H: Research and Training 9 / 13
![Page 15: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/15.jpg)
© Achref EL MOUELHI ©
Event
Event
Les evenements en C#
L’une des utilisations la plus importante des delegues est laprogrammation evenementielle.
Un evenement est declare avec le mot cle event
Les applications a interfaces graphiques sont assez associeesaux concepts de programmation evenementielle (click, input,focus...)
Nomenclature
L’objet qui declenche l’evenement est appele editeur.
Celui qui capture l’evenement et y repond est appele abonne.
H & H: Research and Training 10 / 13
![Page 16: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/16.jpg)
© Achref EL MOUELHI ©
Event
Event
Les evenements en C#
L’une des utilisations la plus importante des delegues est laprogrammation evenementielle.
Un evenement est declare avec le mot cle event
Les applications a interfaces graphiques sont assez associeesaux concepts de programmation evenementielle (click, input,focus...)
Nomenclature
L’objet qui declenche l’evenement est appele editeur.
Celui qui capture l’evenement et y repond est appele abonne.
H & H: Research and Training 10 / 13
![Page 17: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/17.jpg)
© Achref EL MOUELHI ©
Event
Event
Declarer un evenement
public static event Calcul MonEvent;
Declarer un declencheur
public static void MonTrigger(){
MonEvent(7, 5);}
C’est quoi le but?
Executer les methodes d’un delegue lorsqu’un evenement sedeclenche (une methode ici qui sera appelee).
H & H: Research and Training 11 / 13
![Page 18: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/18.jpg)
© Achref EL MOUELHI ©
Event
Event
Declarer un evenement
public static event Calcul MonEvent;
Declarer un declencheur
public static void MonTrigger(){
MonEvent(7, 5);}
C’est quoi le but?
Executer les methodes d’un delegue lorsqu’un evenement sedeclenche (une methode ici qui sera appelee).
H & H: Research and Training 11 / 13
![Page 19: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/19.jpg)
© Achref EL MOUELHI ©
Event
Event
Declarer un evenement
public static event Calcul MonEvent;
Declarer un declencheur
public static void MonTrigger(){
MonEvent(7, 5);}
C’est quoi le but ?
Executer les methodes d’un delegue lorsqu’un evenement sedeclenche (une methode ici qui sera appelee).
H & H: Research and Training 11 / 13
![Page 20: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/20.jpg)
© Achref EL MOUELHI ©
Event
Event
Abonner des methodes a cet evenement
MonEvent = new Calcul(Somme);MonEvent += new Calcul(Produit);
Ou aussi
MonEvent = Somme;MonEvent += Produit;
H & H: Research and Training 12 / 13
![Page 21: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/21.jpg)
© Achref EL MOUELHI ©
Event
Event
Abonner des methodes a cet evenement
MonEvent = new Calcul(Somme);MonEvent += new Calcul(Produit);
Ou aussi
MonEvent = Somme;MonEvent += Produit;
H & H: Research and Training 12 / 13
![Page 22: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/22.jpg)
© Achref EL MOUELHI ©
Event
Event
Declencher l’evenement
MonTrigger();
Resultat
Les methodes abonnees a cet evenement sont executees.
12 35 sont affiches.
On n’a pas execute les methodes a travers le delegue.
H & H: Research and Training 13 / 13
![Page 23: Achref El Mouelhi - LIS lab · 2020. 7. 26. · C#: del´ egu´ e et´ ev´ enement` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par](https://reader033.vdocument.in/reader033/viewer/2022052206/60752e88ceb19802d83d4e61/html5/thumbnails/23.jpg)
© Achref EL MOUELHI ©
Event
Event
Declencher l’evenement
MonTrigger();
Resultat
Les methodes abonnees a cet evenement sont executees.
12 35 sont affiches.
On n’a pas execute les methodes a travers le delegue.
H & H: Research and Training 13 / 13