Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[C#] Utilisation simple et propre des events
Auteur Message
Répondre en citant
Message [C#] Utilisation simple et propre des events 
Bonjour,
si vous le savez, en C# il y a quelque chose qui se nomme "event", c'est très pratique et porte bien son nom (événement) mais son utilisation n'est pas très claire (a cause des nombreux tutos qui sont spécialements faits pour le Winform qui n'est pas un exemple très clair).

La référence C# des events donne cet exemple
Code:
[lang=csharp] public class SampleEventArgs
{
    public SampleEventArgs(string s) { Text = s; }
    public String Text {get; private set;} // readonly
}
public class Publisher
{
    // Declare the delegate (if using non-generic pattern).
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event by using the () operator.
        if (SampleEvent != null)
            SampleEvent(this, new SampleEventArgs("Hello"));
    }
}


Et on ajoute un delegate comme ceci :
Code:
[lang=csharp]SampleEvent += (sender, e) => { /* Une action */ };

Et on l'éxécute avec :
Code:
[lang=csharp]RaiseSampleEvent();


Cette utilisation n'est pas très pratique car avoir ces deux arguments est très encombrant en plus d'avoir une fonction pour "raise".

J'ai trouver comment faire des events de façon propre.

En voila une :
Code:
[lang=csharp]public event Action MonEventPropreEtSimple;

Pour ajouter un délégate :
Code:
[lang=csharp]MonEventPropreEtSimple += () => { /* Une action */ };
On peut aussi ajouter une méthode :
Code:
[lang=csharp]MonEventPropreEtSimple += new Action(Console.WriteLine);
// Et apparemment aussi :
MonEventPropreEtSimple += Console.WriteLine;

Et pour l'éxécuter :
Code:
[lang=csharp]MonEventPropreEtSimple(); // Tout simplement


On peut également mettre un argument customisé.
En créant un type délégué comme par exemple ceci :
Code:
[lang=csharp]public delegate void MessageRecievedDelegate(byte[] raw_message);

Ce qui donne pour l'event :
Code:
[lang=csharp]public event MessageRecievedDelegate OnMessageRecieved;

Que l'on utilise :
Code:
[lang=csharp]OnMessageRecieved(byte[]);

Et par exemple pour y ajouter une action :
Code:
[lang=csharp]OnMessageRecieved += (raw_message) => { /* Une action */ };


Ce mode de fonctionnement peut ne pas être compatible avec les WinForms/WPF, car c'est des fonctionnements très différents.

Je donnerais d'autre exemple d'event dans le futur.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message Publicité 
PublicitéSupprimer les publicités ?


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch