Función de devolución de llamada de C # en detalle

¿Qué son las devoluciones de llamada y las funciones de devolución de llamada?

Hay interfaces entre los módulos de software y la devolución de llamada es un modo de llamada bidireccional. El destinatario de la llamada también llamará a la interfaz de la otra parte cuando se llame a la interfaz.
Para lenguajes estructurados generales, las funciones de devolución de llamada se pueden utilizar para implementar devoluciones de llamada. Una función de devolución de llamada es una función o procedimiento, que es implementado por la persona que llama y utilizado por la persona que llama.
Para C y C ++, la llamada generalmente se implementa a través de punteros de función.
Para C #, el evento delegado declarado es como un puntero. Se llama a otro método a través de la variable de evento y el método se pasa a otro método como parámetro. La función de devolución de llamada es parte de un flujo de trabajo, y el flujo de trabajo determina el momento de la llamada a la función (devolución de llamada).

¿Cómo lograrlo?

Implemente devoluciones de llamada declarando delegados.
A menudo encontramos procesos desencadenados por eventos en la programación C #, y la forma de definir este evento es la función de devolución de llamada. La función de devolución de llamada es en realidad el proceso de un método que llama a otro método, que se implementa a través de un delegado, no necesariamente un evento o una variable delegada.
Primero observe un código típico de declaración de delegado de C #:

public delegate void EventHandler( object sender , EventArgs e )

Entre ellos, el objeto remitente: representa el objeto de control que desencadenó el evento, y el parámetro remitente se utiliza para pasar una referencia al objeto de origen del evento. Utilice el remitente para averiguar el control específico que desencadenó el evento.
EventArgs es la clase base de la clase que contiene los datos del evento, que se utiliza para transmitir los detalles del evento y es la información adjunta al evento.

using System;

namespace 回调函数
{
    //1.声明关于事件的委托;
    public delegate void AlarmEventHandler(object sender, EventArgs e);
    class Dog
    {
        //2.声明事件;   
        public event AlarmEventHandler Alarm;

        //3.编写引发事件的函数;
        public void OnAlarm()
        {
            if (this.Alarm != null)
            {
                Console.WriteLine("\n汪汪~~~~~~~");
                this.Alarm(this, new EventArgs());   //发出警报
            }
        }
    }

    //事件接收者
    class Host
    {
        //4.编写事件处理程序
        void HostHandleAlarm(object sender, EventArgs e)
        {
            Console.WriteLine("主人: 吓死宝宝!");
        }

        //5.注册事件处理程序
        public Host(Dog dog)
        {
            dog.Alarm += new AlarmEventHandler(HostHandleAlarm);
        }
    }

    class Thief
    {
        void ThiefHandleAlarm(object sender, EventArgs e)
        {
            Console.WriteLine("小偷: 吓死宝宝!");
        }
        public Thief(Dog dog)
        {
            dog.Alarm += new AlarmEventHandler(ThiefHandleAlarm);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Host host = new Host(dog);
            Thief thief = new Thief(dog);
            //当前时间,从2021年3月9日23:59:50开始计时
            DateTime now = new DateTime(2021, 3, 9, 23, 59, 55);
            DateTime midnight = new DateTime(2021, 3, 10, 0, 0, 0);

            //等待午夜的到来
            Console.WriteLine("时间一秒一秒地流逝... ");
            while (now < midnight)
            {
                Console.WriteLine("当前时间: " + now);
                System.Threading.Thread.Sleep(1000);    //程序暂停一秒
                now = now.AddSeconds(1);                //时间增加一秒
            }
            Console.WriteLine("\n月黑风高的午夜: " + now);
            Console.WriteLine("小偷悄悄地摸进了女主人的屋内... ");
            dog.OnAlarm();
            Console.ReadLine();
        }
    }
}

Artículo de referencia:
Comprensión de la función de devolución de llamada de C # Función de devolución de llamada de
C # (activador de evento), manejo perfecto de todo tipo de enfermedades incurables.

Supongo que te gusta

Origin blog.csdn.net/baidu_35536188/article/details/114629788
Recomendado
Clasificación