Events en C#

Les Events sont des actions comme key press, clic ou mouvement de souris, etc. ou des notifications créés par un système. En général, les applications doivent correspondre aux events quand ils occurrent, par exemple interrompre un logiciel. Principalement, les events sont utilisées pour la communication entre les procès.

Delegates et Events

La classe qui contient un évènement est utilisée pour publier un event. Cette classe s’appelle la classe publisher. Quelque autre classe qui accepte cet évènement est la calsse subscriber. Les events utilisent donc le model publisher-subscriber :
Un publisher, c’est un objet qui contient la définition d’un évènement et le delegate. L’objet d’une classe publisher invoque un event.
Un subscriber, c’est un objet qui accept un event et fourni un event handler. Le delegate dans la classe publisher invoque la méthode (event handler) d’une classe subscriber.

Voici un exemple :

namespace EventsExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var button = new Button();
            button._clicked = A;
            button._clicked += B;
            button._clicked += C;
        }

        private static void C(object sender, EventArgs args)
        {
            throw new NotImplementedException();
        }

        private static void B(object sender, EventArgs args)
        {
            throw new NotImplementedException();
        }

        private static void A(object sender, EventArgs args)
        {
            var button = sender as Button;
            Console.WriteLine(button.Name);
        }
    }

    class ClickArgs : EventArgs
    {
        public int X { get; set; }
        public int Y { get; set; }

        public DateTime ClickTime { get; set; }

        public string Name { get; set; }
    }

    delegate void MyClickDelegate(object sender, ClickArgs args);

    class Button
    {
        public string Name { get; set; }      

        //public MyClickDelegate _clicked;

        public EventHandler<ClickArgs> _clicked;

        public void Click()
        {
            var args = new ClickArgs
            {
                X = 1,
                Y = 2,
                ClickTime = DateTime.Now
            };
            _clicked(this, args);
        }
    }
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *