.NET 提供 100 多種 EventArgs 衍生類,但為示範原理,自訂 NumberOfThiefEventArgs:
public class NumberOfThiefEventArgs : EventArgs
{
public int NumberOfThief;
public NumberOfThiefEventArgs(int number) { NumberOfThief = number; }
}
class Dog
{
// 1. 宣告委派
public delegate void AlarmEventHandler(object sender, NumberOfThiefEventArgs e);
// 2. 宣告事件
public event AlarmEventHandler Alarm;
// 3. 觸發事件方法
public void OnAlarm(NumberOfThiefEventArgs e)
{
if (this.Alarm != null)
{
Console.WriteLine("\n狗報警: 有小偷進來了,汪汪~~~~~~~\n");
this.Alarm(this, e);
}
}
}
class Host
{
// 4. 事件處理器
void HostHandleAlarm(object sender, NumberOfThiefEventArgs e)
{
if (e.NumberOfThief <= 1)
Console.WriteLine("主人: 抓住了小偷!");
else
Console.WriteLine("主人: 打110報警, 我家來了{0}個小偷!", e.NumberOfThief);
}
// 5. 註冊 (於建構子)
public Host(Dog dog)
{
dog.Alarm += new Dog.AlarmEventHandler(HostHandleAlarm);
}
}
EventArgs,攜帶自訂資料 (小偷數量)。sender 與自訂 EventArgs。Alarm != null 避免空參考例外。