C# 事件Event

关于“事件”的定义,请去问Google吧,本文不引用官方的术语。

废话不多说,先定义一下场景:

微波炉,大家生活中都有用过,当你关上微波炉的门时便自动加热。“关门”和“加热”便是两个动作。注意,当关上门的时候便开始加热,这里“当关上门”便是一个“事件”的触发条件。触发了什么?“加热”这个动作。

我相信你完全能理解我上面所说的内容吧?那么接下来我便一步一步来实现我的题目“C#事件Event”

第一步:定义我们的对象

对象一:微波炉

复制代码
/// <summary>
    /// 微波炉
    /// </summary>
    class Microwave
    {

    }
复制代码

对象二:加热器(微波炉内置)

复制代码
/// <summary>
    /// 加热器
    /// </summary>
    class Heater
    {

    }
复制代码

第二步:添加动作(或称行为)

我们提过的,“关门” 和 “加热” 两个动作

复制代码
/// <summary>
    /// 微波炉
    /// </summary>
    class Microwave
    {        
        /// <summary>
        /// 关门
        /// </summary>
        public void CloseDoor()
        {
            Console.WriteLine("Now the door is closed!");
        }
    }

    /// <summary>
    /// 加热器
    /// </summary>
    class Heater
    {
        /// <summary>
        /// 加热
        /// </summary>
        public void Heating()
        {
            Console.WriteLine("The food is heating!");
            Console.ReadLine();
        }
    }
复制代码

第三步:定义我们的“事件”(出场)

复制代码
    /// <summary>
    /// 微波炉
    /// </summary>
    class Microwave
    {        
public delegate void DoorCloseHandler(); public event DoorCloseHandler DoorCloseEvent; /// <summary> /// 关门 /// </summary> public void CloseDoor() { Console.WriteLine("Now the door is closed!"); } }
复制代码

这里我们给“门”定义“关闭”事件,也就是下面那两句:

public delegate void DoorCloseHandler();        
public event DoorCloseHandler DoorCloseEvent;

“事件”有了,什么时候执行呢?当然是“关上门”后执行了。

复制代码
/// <summary>
    /// 微波炉
    /// </summary>
    class Microwave
    {        
        public delegate void DoorCloseHandler();        
        public event DoorCloseHandler DoorCloseEvent;

        /// <summary>
        /// 关门
        /// </summary>
        public void CloseDoor()
        {
            Console.WriteLine("Now the door is closed!");
            OnDoorClosed();
        }

        public void OnDoorClosed()
        {
            if (DoorCloseEvent != null)
                DoorCloseEvent();
        }
    }
复制代码

看到了吗?在我们之前定义的 CloseDoor 方法后面调用我们的“事件”。

到这里为止,我们知道了事件的“发起者”(关门动作),事件的“要做什么”(加热),事件“什么时候执行”(关上门),还缺点什么呢?

串起来喽,也就是俗称的“绑定”它。

复制代码
/// <summary>
    /// 微波炉
    /// </summary>
    class Microwave
    {        
        public delegate void DoorCloseHandler();        
        public event DoorCloseHandler DoorCloseEvent;

        /// <summary>
        /// 关门
        /// </summary>
        public void CloseDoor()
        {
            Console.WriteLine("Now the door is closed!");
            OnDoorClosed();
        }

        public void OnDoorClosed()
        {
            if (DoorCloseEvent != null)
                DoorCloseEvent();
        }

        public Microwave()
        {
            Heater heater = new Heater();
            this.DoorCloseEvent += heater.Heating;
        }
    }
复制代码

我选择了在厂家生产微波炉的时候就把他们绑起来(我是想说构造函数来着),不是这样,我不会买这微波炉的,你呢?

大功告成,让我们“关门”试试吧!

复制代码
    class Program
    {
        static void Main(string[] args)
        {
            Microwave wave = new Microwave();
            wave.CloseDoor();
        }
    }
复制代码

最后附上完整代码:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Event
{
    class Program
    {
        static void Main(string[] args)
        {
            Microwave wave = new Microwave();
            wave.CloseDoor();
        }
    }

    /// <summary>
    /// 微波炉
    /// </summary>
    class Microwave
    {        
        public delegate void DoorCloseHandler();        
        public event DoorCloseHandler DoorCloseEvent;

        /// <summary>
        /// 关门
        /// </summary>
        public void CloseDoor()
        {
            Console.WriteLine("Now the door is closed!");
            OnDoorClosed();
        }

        public void OnDoorClosed()
        {
            if (DoorCloseEvent != null)
                DoorCloseEvent();
        }

        public Microwave()
        {
            Heater heater = new Heater();
            this.DoorCloseEvent += heater.Heating;
        }
    }

    /// <summary>
    /// 加热器
    /// </summary>
    class Heater
    {
        /// <summary>
        /// 加热
        /// </summary>
        public void Heating()
        {
            Console.WriteLine("The food is heating!");
            Console.ReadLine();
        }
    }
}
复制代码

希望能对你对事件的理解和使用有所帮助,谢谢!

开博之作,转载麻烦注明原创作者,谢谢。期待下一篇吧:)

 
 
标签: C#Event
原文地址:https://www.cnblogs.com/Leo_wl/p/2807219.html