class SectLeader
{
// 定义一个委托
public delegate void Notify();
// 基于委托定义事件
public event Notify OnAttack;
// 发射信号!
public void BeAttacked()
{
Console.WriteLine("教主:我被打了!");
if (OnAttack != null) // 如果有人在听
{
OnAttack(); // 触发事件
}
}
}
使用 += 来订阅,使用 -= 来取消订阅。
class Disciple
{
public void Fight()
{
Console.WriteLine("弟子:护驾!");
}
}
// Main:
SectLeader dongfang = new SectLeader();
Disciple yang = new Disciple();
// 1. 订阅:杨莲亭发誓要保护东方不败
dongfang.OnAttack += yang.Fight;
// 2. 触发:教主被打
dongfang.BeAttacked();
// 输出:
// 教主:我被打了!
// 弟子:护驾!
Click 事件,你的代码订阅了这个事件,然后执行逻辑。
dongfang.OnAttack()),那是越权!
创建一个 Clock 类,有一个 OnAlarm 事件。
当调用 Ring() 方法时,触发该事件。
在 Main 里订阅它,输出“起床练功了!”。
class Clock
{
public event Action OnAlarm; // 用系统自带的 Action 委托更省事
public void Ring()
{
if (OnAlarm != null) OnAlarm();
}
}
// Main:
Clock c = new Clock();
c.OnAlarm += () => Console.WriteLine("起床练功!"); // Lambda 写法
c.Ring();