事件

xiaoxiao2025-08-12  20

前言

委托类型的变量可以作为类的成员,也可以作为方法的局部变量public event MyDelegate myDelegate在一个委托类型的变量前面加上event,就声明了一个事件

盲点

事件和委托同时在Test类里面被声明为public但是事件的调用只能在Test类中,在该类外面就只能+=或者-=而委托则可以在任何类中进行调用

区别点

事件只能作为类的成员被声明由于事件不是类型,我们不能使用对象创建表达式来创建它的对象由于是成员,必须声明在类或结构中不能在一段可执行代码中声明事件事件成员被隐式自动初始化为null

发布者类——猫

// 发布者类 class Cat { private string color; private string name; public Cat(string color, string name) { this.name = name; this.color = color; } public void CatComing() { Console.WriteLine("{0}的猫咪{1}进来了", color, name); runEvent(); } private event Action runEvent; //我不想把事件暴露出去 //public static event Action runEvent; //也可以设置成静态成员 public void AddRun(Action method) //提供一个方法添加事件 { runEvent += method; } }

订阅者类——老鼠

// 订阅者类 class Mouse { private string name; public Mouse(string name) { this.name = name; } public void Run() { Console.WriteLine("老鼠{0}正在逃跑中....",name); } }

触发事件

class Program { static void Main(string[] args) { //Mouse 属于订阅者类 Mouse mouse1 = new Mouse("吉米"); Mouse mouse2 = new Mouse("大黑"); Mouse mouse3 = new Mouse("小绿"); //猫属于发布者类 Cat cat = new Cat("花色", "小喵"); cat.AddRun(mouse1.Run); cat.AddRun(mouse2.Run); cat.AddRun(mouse3.Run); //当猫进来的时候,触发事件,老鼠逃跑 cat.CatComing(); //cat.runEvent(); Console.ReadKey(); } } 注意事件只能出现在+=,-=的左边,在发布者类外部无法作为方法调用但是委托可以,不过尽量不要使用,以免出错
转载请注明原文地址: https://www.6miu.com/read-5034712.html

最新回复(0)