引用:https://blog.csdn.net/cxu123321/article/details/91368837
1什么是事件
2 怎么用事件
事件的定义:和委托类似,事件是后期绑定机制。 实际上,事件是建立在对委托的语言支持之上的。事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。 任何其他组件都可以订阅事件,并在事件引发时得到通知。(举个例子:小明跟小红说吃完午饭去上网,小红什么时候吃饭不一定,这时候就需要事件,当小红吃完饭,就通知小明去上网)
简单的来说,鼠标移动、点击等等都是一个事件。但并非唯一的情景。可以定义应针对类引发的事件。通过订阅事件,还可在两个对象(事件源和事件接收器)之间创建耦合。 需要确保当不再对事件感兴趣时,事件接收器将从事件源取消订阅。
事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。
发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。
订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。
2怎么用事件(带参数,不带参数,带返回值,不带返回值)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Sample001
{
public delegate String InformHandle(object sender);//参数传递位置
public class JIA
{
public event InformHandle EatOver;
public void eat()
{
Console.WriteLine("吃饭中......");
System.Threading.Thread.Sleep(2000); //吃饭事件两秒
OnEating(); //这个相当于是一个信号,当运行这个函数的时候会发出一个信号。
}
public virtual void OnEating() {
if (EatOver != null)
{
String a =EatOver(this);//返回值获取
}
}
}
public class YI
{
public String TakeJiaToWangBa(object sender)
{
return "事件返回值";
}
}
class Program {
static void Main(string[] args)
{
JIA jia1 = new JIA();
YI yi1 = new YI();
jia1.EatOver += new InformHandle(yi1.TakeJiaToWangBa);
Console.WriteLine("空闲中");
Console.WriteLine("现在甲不知道在干什么");
jia1.eat();
Console.WriteLine("去了网吧通宵一个晚上到了第二天中午");
jia1.eat();
Console.ReadKey();
}
}
}
总结一下:delegate 声明委托(传递参数以及返回值类型都在这里),event声明事件,新写一个方法作为触发方法,订阅器中接受事件并处理事件,返回值以及参数都在绑定的类中。