23
C# :d´ el´ egu ´ e et ´ ev` enement Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 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

  • Upload
    others

  • View
    48

  • Download
    5

Embed Size (px)

Citation preview

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

C# : delegue et evenement

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

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

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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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