Как использовать встроенные делегаты C#?

Корпорация Майкрософт предоставляет 2 встроенных делегатов для работы.

    public delegate void EventHandler(object sender, EventArgs e);
    public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

Эти встроенные делегаты помогают вам легко писать код обработки событий. С помощью этих делегатов можно передать одно или несколько значений обработчику событий. Когда вы создаете событие, вы должны следовать типизации и передать необходимые параметры делегатам.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace event_programming
    {
        //This is Subscriber Class
        class Program
        {
            static void Main(string[] args)
            {
                AddTwoNumbers a = new AddTwoNumbers();
                //Event gets binded with delegates
                a.ev_OddNumber += EventMessage;
                a.Add();
                Console.Read();
            }      
            //Delegates calls this method when event raised.  
            static void EventMessage(object sender, EventArgs e)
            {
                Console.WriteLine("***Event Executed : This is Odd Number***");            
            }
        }
        //This is Publisher Class
        class AddTwoNumbers
        {
            public event EventHandler<EventArgs> ev_OddNumber;
     
            public void Add()
            {
                int result;
                result = 5 + 4;
                Console.WriteLine(result.ToString());
                //Check if result is odd number then raise event
                if((result % 2 != 0) && (ev_OddNumber != null))
                {
                  ev_OddNumber(this, EventArgs.Empty); //Raised Event
                }          
            }
        }
    }

 

В этой программе я использовал встроенные делегаты в c#.

Объявил встроенный делегат

public event EventHandler<EventArgs> ev_OddNumber;

Вызываем событие

ev_OddNumber(this, EventArgs.Empty);

this обозначает текущий экземпляр класса 
EventArgs.Emptyговорит, что есть пустое значение в параметре.

Инициализация событий в главной функции

a.ev_OddNumber += EventMessage;

Вызывает методы с требуемыми параметрами.

    static void EventMessage(object sender, EventArgs e)
            {
                Console.WriteLine("***Event Executed : This is Odd Number***");            
            }

В приведенной выше программе события не возвращают никакого значения. Теперь рассмотрим следующую измененную программу, которая возвращает значение с помощью EventArgs.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace event_programming
    {    
        class Program
        {
            static void Main(string[] args)
            {
                AddTwoNumbers a = new AddTwoNumbers();
                a.ev_OddNumber += EventMessage;
                a.Add();
                Console.Read();            
            }      
                   
            static void EventMessage(object sender, OddNumberEventArgs e)
            {
                Console.WriteLine("Event Executed : {0} is an Odd Number", e.sum);            
            }
        }
     
        public class AddTwoNumbers
        {
            public event EventHandler<OddNumberEventArgs> ev_OddNumber;
     
            public void Add()
            {
                int result;
                result = 5 + 4;
                Console.WriteLine(result.ToString());            
                if((result % 2 != 0) && (ev_OddNumber != null))
                {
                   ev_OddNumber(this, new OddNumberEventArgs(result)); //Raised Event
                }          
            }        
        }
     
        //Creating Custom EventArgs
        public class OddNumberEventArgs : EventArgs
        {
            public OddNumberEventArgs(int result)
            {
                sum = result;
            }
            public int sum { get; set; }
        }
    }

Давайте разберемся в этом примере.

  1. Я создал пользовательский класс OddNumberEventArgs, который наследует EventArgs. Этот класс просто устанавливает значение параметра в переменную sum.
    public class OddNumberEventArgs : EventArgs
        {
            public OddNumberEventArgs(int result)
            {
                sum = result;
            }
            public int sum { get; set; }
        }

2. Теперь, созданное событиеev_OddNumber, используя этот класс.

    public event EventHandler<OddNumberEventArgs> ev_OddNumber;

3. Передайте обязательный параметр при вызове этого события.

ev_OddNumber(this, new OddNumberEventArgs(result)); //Raised Event

4. Теперь в EventMessage()функции; OddNumberEventArgs eимеет значение.

    static void EventMessage(object sender, OddNumberEventArgs e)
            {
               Console.WriteLine("Event Executed : {0} is an Odd Number", e.sum);            
            }
Обновлено: 03.01.2020 — 22:46

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.