菜的像徐坤
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

C# 事件

4483人阅读 2021/6/18 17:00 总访问:876740 评论:0 收藏:1 手机
分类: .net

前言

事件是通过委托实现的
事件关键字:event
EventArgs类:表示包含事件数据类的基类,并提供用于不包含事件数据的事件的值

什么是事件?
用户操作,如按键、点击、鼠标移动等等

事件定义规则

先定义一个委托

public delegate void May(string status);
// 基于上面的委托定义事件
public event May may;

定义一个事件

       //定义一个标准事件
        public delegate void May(object sender, EventArgs e);
        //事件名
        public event May miao;
        
        //抓老鼠的方法
         public void CathMouse()
        {
            CatMessage catMessage = new CatMessage();
            catMessage.message = "抓老鼠";
            //传递使用委托
            miao(this, catMessage);

        }

        //定义一个类,使事件接受字符串
        public class CatMessage : EventArgs
        {
            public string message;
        }

定义一个调用事件的方法

public static void Mouse_Run(object sender, EventArgs e)
        {
            CatMessage cat= e as CatMessage;

            Console.WriteLine(cat.message);
           
        }

添加事件

            Cat cat = new Cat();
            cat.miao += Mouse_Run;
            //执行包含委托的方法,这样委托执行过后自动会调用到Mouse_Run这个方法
            cat.CathMouse();


一个简单的事件就定义好了

用事件触发事件

一个事件触发过后,另外一个事件也会被连锁触发
接着上边的案例写,上边只出发了一个事件
那么能不能在出发事件的时候再出发另外一个事件呢?

再定义一个老鼠跑的事件

public class Mouse
    {
        public delegate void May(object o,EventArgs e);
        public event May mouse;

        public void MouseRun()
        {
            MouseMessage mouseMessage = new MouseMessage();
            mouseMessage.Mousemessage = "老鼠跑了";
            mouse(this, mouseMessage);

        }
        public class MouseMessage : EventArgs
        {
            public string Mousemessage;
        }
    }


在触发事件的同时,再次触发另外一个事件
先定义老鼠跑的方法

    public static void mouse_run(object o, EventArgs e) 
        {
            MouseMessage mouse = e as MouseMessage;
            Console.WriteLine(mouse.Mousemessage);
        }
        
        //在猫抓老鼠的事件中触发老鼠跑的事件
           public static void cat_miao(object sender, EventArgs e)
        {
            CatMessage cat = e as CatMessage;

            Console.WriteLine(cat.message);

            Mouse mouse = new Mouse();
            mouse.mouse += mouse_run;
            mouse.MouseRun();
               
        }

输出结果
代码运行基本逻辑:
猫抓老鼠的事件触发过后—>输出猫抓老鼠—>抓老鼠执行过后继续执行下一个事件—>老鼠跑—>执行老鼠跑的事件被触发—>输出老鼠跑



连锁调用多个事件也是如此,在调用事件的方法执行过后接着调用下一个方法就可以了

评价