Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

7 août 2007 2 07 /08 /août /2007 11:46
Bien structurer ses événements

Je me suis inspiré de PropertyChanging pour cet exemple..
 
ClassDiagram1-copie-2.jpg

 
-          1 classe contenant l’EventArgs (héritant de EventArgs)
-          1 classe contenant le délégué (EventHandler)
-          Dans les classes utilisant l’EventArgs :
o   1 délégué
o   1 méthode On… retournant le délégué
-          Références de la classe + abonnement à l’événement (par += et méthode appelée)
1 - Créer une classe contenant l’EventArgs
    public class ContactPropertyChangingEventArgs : EventArgs
    {
        private readonly string propertyName;
 
        public virtual string PropertyName
        {
            get { return this.propertyName; }
        }
        public ContactPropertyChangingEventArgs(string propertyName)
        {
            this.propertyName = propertyName;
       
    }
 
2 - Créer une classe contenant le délégué :
-          Suffixé par Handler
-          Retournera l’objet ayant déclenché l’événement et L’EventArgs 

Note : étant donné l'on passe par l'intermédiaire d'un délégué, il est tout à fait possible de lancer l'événement de manière asynchrone avec BeginInvoke
    public delegate void ContactPropertyChangingEventHandler(object sender, ContactPropertyChangingEventArgs e);
 
3 - Créer une classe qui va utiliser l’événement  
    public class Contact
    {
        public event ContactPropertyChangingEventHandlerContactPropertyChanging;
 
        private int _contactID;
 
        public int ContactID
        {
            get { return _contactID; }
            set
            {
                this.OnContactPropertyChanging("ContactID");
                _contactID = value;
            }
        }
 
        private string _contactName;
 
        public string ContactName
        {
            get { return _contactName; }
            set
            {
                this.OnContactPropertyChanging("ContactName");
                _contactName = value;
            }
        }
 
        private int _contactAge;
 
        public int ContactAge
        {
            get { return _contactAge; }
            set
            {
                this.OnContactPropertyChanging("ContactAge");
                _contactAge = value;
            }
        }
 
        public Contact()
        { }
        public Contact(int contactID,string contactName,int contactAge)
        {
            this.ContactID = contactID;
            this.ContactName = contactName;
            this.ContactAge = contactAge;
        }
 
        public void OnContactPropertyChanging(string propertyName)
        {
            if ((this.ContactPropertyChanging != null))
            {
                this.ContactPropertyChanging(this, new ContactPropertyChangingEventArgs(propertyName));
            }
        }
    }
 
4 - La classe abonnée
       Contact contact;
 
        private void Form1_Load(object sender, EventArgs e)
        {
            contact = new Contact(2, "Bellin", 25);
            // on s’abonne à l’evenement
            contact.ContactPropertyChanging += new ContactPropertyChangingEventHandler(contact_ContactPropertyChanging);
        }
        // la méthode qui sera appelée
        void contact_ContactPropertyChanging(object sender, ContactPropertyChangingEventArgs e)
        {
            MessageBox.Show(e.PropertyName);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            contact.ContactAge = 26;// birth day !!
        }
 

Partager cet article

Repost 0
Published by Romagny13 - dans C 1.0- 2.0- 3.0
commenter cet article

commentaires

romagny13 09/08/2007 01:42

oui les generics sont partout :)