第十一章 事件

以前的2片的文章:自己理解的不是很深入,先放之前的2篇,本章也不打算用多么晦涩难懂的原理机制,来点实用的。

https://www.cnblogs.com/LiMin/p/7212217.html

https://www.cnblogs.com/LiMin/p/10364867.html

 

     在类型中定义的一种成员,定义了事件成员的类或者类的实例。允许通知其他对象发生了特定的事情。

比如Button 类定义了click 事件,应用程序中一个或者多个对象可以通过该事件接收发生的click操作,以便做后续操作。

 

Button类就是一个类,click 就是事件成员, 其他应用程序就是其他对象,通过事件成员click,其他对象被通知发生了特定的事情:点击。这样事件通俗的定义就解释完了。

首先我们看,事件是类型的成员,因此必须有一个类型,一个事件成员,一个其他对象才能构成事件的定义到触发,它才能发生作用。

那么事件是怎么通知到其他对象呢?因为时间可以理解为一个方法表,上面登记了其他对象接收该特定事情的方法入口。当事情发生时候,调用这些方法,那么其他对象就知道该特定事情就发生了。

 先Demo后面有分析

 

using System;

namespace EventTest
{
    public class EventDemo
    {
        public void EventTest()
        {
            Cat cat = new Cat();
            MouseEventArgs ms = new MouseEventArgs();
            MasterEventArgs mas = new MasterEventArgs();
            cat.Calling += ms.Escape;//老鼠对 clling 订阅
            cat.Calling += mas.Wakened;//人 对 calling 订阅
            cat.Call(); //猫叫
        }
    }
    public sealed class Cat
    {
        public event EventHandler Calling;
        public void Call()
        {
            Console.WriteLine("猫叫了...");
            Calling?.Invoke(this, EventArgs.Empty);
        }
    }
    public sealed class MouseEventArgs : EventArgs
    {
        public void Escape(object sender, EventArgs e)
        {
            Console.WriteLine("老鼠逃跑了...");
        }
    }
    public sealed class MasterEventArgs : EventArgs
    {
        public void Wakened(object sender, EventArgs e)
        {
            Console.WriteLine("主人醒了");
        }
    }
}

 

 

 

那么我们来开始定义事件

三要素:

        1.其他对象、事件、类

           其他对象:就是一个接收通知的类型吧 按照标准规范这些类型继承自:System.EventArgs并且类型结尾以EventArgs结尾

          

 

       2.事件成员本身

        

 

       3.

         类中的方法要触发其他对象的响应,

         

 

       4.触发 就是给事件注册进各自的对象方法即可

       

 

    这样一个简单版本的形式主义事件就基本上完成了,也够用了。由于理解有限,以及事件讲起来麻烦,因此就以这个简单实用的版本来进行讲解。

 

 

posted on 2019-05-09 21:02  无觉-李敏  阅读(116)  评论(0编辑  收藏  举报