5. 註冊事件處理器
public Host(Dog dog)
{
dog.Alarm += new Dog.AlarmEventHandler(HostHandleAlarm);
}
6. 觸發事件完整流程
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
Host host = new Host(dog);
DateTime now = new DateTime(2008, 12, 31, 23, 59, 50);
DateTime midnight = new DateTime(2009, 1, 1, 0, 0, 0);
Console.WriteLine("時間一秒一秒地流逝...");
while (now < midnight)
{
Console.WriteLine("當前時間: " + now.ToString("HH:mm:ss"));
System.Threading.Thread.Sleep(1000);
now = now.AddSeconds(1);
}
// 午夜到達,觸發警報
dog.OnAlarm(new NumberOfThiefEventArgs(3)); // 假設 3 個小偷
Console.ReadLine();
}
}
執行結果預期
時間一秒一秒地流逝...
當前時間: 23:59:50
...
當前時間: 23:59:59
狗報警: 有小偷進來了,汪汪~~~~~~~
主人: 打110報警, 我家來了3個小偷!
完整類別結構回顧
- Dog (事件發送者):宣告委派、事件、
OnAlarm 觸發方法。
- NumberOfThiefEventArgs:攜帶小偷數量資訊。
- Host (事件接收者):實作
HostHandleAlarm,於建構子註冊至 dog.Alarm。
- Program:建立物件、模擬時間流逝、呼叫
OnAlarm 觸發事件。