C# 事件
电脑版发表于:2021/6/18 17:00
前言
事件是通过委托实现的
事件关键字: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(); }
输出结果
代码运行基本逻辑:
猫抓老鼠的事件触发过后—>输出猫抓老鼠—>抓老鼠执行过后继续执行下一个事件—>老鼠跑—>执行老鼠跑的事件被触发—>输出老鼠跑
连锁调用多个事件也是如此,在调用事件的方法执行过后接着调用下一个方法就可以了