• 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
  • 相关阅读:
    IIS 添加二级应用程序
    VS中发布并调试IIS程序
    未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
    Flash基础开发习惯指要
    2012云计算扫盲
    flash问题集锦(新手必看)
    Flash常用ActionScript控制语句基本用法祥解
    通过offset值的设置使html元素对齐
    不用float也可以让div横向显示
    QQ空间里写的开发心得
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2807219.html
Copyright © 2020-2023  润新知