事件使用案例:猫叫 引发老鼠逃跑,主人惊醒
事件的定义:事件是委托类型的类的数据成员,
表示类(对象)的偶发性行为,当这个行为发生时,往往会引发其他行为的自动执行
事件是用来实现两个或多个行为的联动调用的
使用事件的步骤(四个):
1.定义事件(public event 委托类型 事件名; 因此需要提前定义需要的委托(代表一类方法))
2.注册事件(添加事件触发时 需要执行的行为)
3.触发事件(将事件的触发写入一个方法行为中,通过该行为的调用,来触发事件,从而引发其余注册行为的调用)
4.调用触发事件的方法
注意:通常1、3写在定义端,定义在哪就触发在哪(同一个类 对象)
2、4写在调用端(其中注册的行为可以使任何对象的规范(同一类型的)行为)
事件是委托的一种使用方式:(本质上事件就是一种特殊的委托:通过注册(也可以理解为绑定)方法,调用事件(委托)来调用注册的方法)
class Program
{
//调用端
static void Main(string[] args)
{
//因为事件定义在该类中,该类是事件源(猫叫),所以需要创建该对象 用于调用事件注册方法
Cat cat = new Cat();
//事件触发后 会相应的行为对象(老鼠跑、人惊醒),因此需要创建出对象,用于注册其中的方法行为
Mouse mouse = new Mouse();
Master master = new Master();
//步骤二:注册事件 当该事件触发时 则会执行对应注册的方法行为(注册任何相同类型(对象)的行为都可以)
cat.On_Call += mouse.Run;
cat.On_Call += master.Weak;
//取消注册
cat.On_Call -= master.Weak;
//步骤四:调用触发事件的方法
cat.Call();//当执行该方法时,触发事件(因为事件的调用在该方法中,即与之绑定了),因此触发注册的行为
}
}
//定义端
//定义委托
delegate void Handler();
/// <summary>
/// 猫类(事件源)
/// </summary>
class Cat
{
/// <summary>
/// 步骤一:定义事件(event可以省略)
/// </summary>
public event Handler On_Call;
public void Call()
{
Console.WriteLine("猫叫了");
if (On_Call != null)//如果事件不为空 则可以触发事件
//步骤三:调用事件(因为该对象是事件源,事件是由该对象触发的,所以事件定义在哪里就在哪里触发)
On_Call();
}
}
class Mouse
{
public void Run()
{
Console.WriteLine("老鼠逃跑了");
}
}
class Master
{
public void Weak()
{
Console.WriteLine("主人惊醒了");
}
}