關于事件各位應該都不陌生,相信每個程序員都可以拍著胸脯說“事件?我知道啊~”,可如何自定義事件?也許有人心中就不是那么底氣十足了。還是老規矩吧,高手繞行~
用很多地方都被引用到泛濫的一個例子來寫吧,始作俑者就不去深究了。描述是這樣的:小偷進入時,事件發送者(貓)發送貓叫事件(自定義),(事件接收者)主人訂閱貓叫事件并處理(抓住小偷),事件的參數傳遞的是小偷的數量。
下面就給出實現的具體步驟---已經在代碼注釋中標明,以供各位博友抽象出自定義事件的流程。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 自定義事件
{
//http://www.cnblogs.com/DebugLZQ
//自定義事件步驟的示例代碼
//0.定義事件傳遞的參數
class AlarmEventArgs : EventArgs
{
public int numberOfThief;
public AlarmEventArgs(int n)
{
numberOfThief = n;
}
}
//事件的發出者
class Dog
{
//1.聲明事件的委托
public delegate void AlarmEventHandler(Object sender, AlarmEventArgs e);
//2.聲明事件
public event AlarmEventHandler Alarm;
//3.引發事件的函數
public void OnAlarm(AlarmEventArgs e)
{
if (this.Alarm != null)
{
Console.WriteLine("The dog is Wangwang...");
this.Alarm(this, e);
}
}
}
//事件的訂閱者
class Host
{
//4.訂閱事件
public Host(Dog dog)
{
dog.Alarm += new Dog.AlarmEventHandler(HostHandleEvent);
}
//5.事件處理程序
public void HostHandleEvent(Object sender, AlarmEventArgs e)
{
Console.WriteLine("Host caught the thief! The sum is "+e.numberOfThief);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Program is running...");
Dog dog = new Dog();
Host host = new Host(dog);
Console.WriteLine("Someone is coming...");
//6.在合適的時候引發事件
AlarmEventArgs alarmEventArgs = new AlarmEventArgs(3);
dog.OnAlarm(alarmEventArgs);
Console.ReadKey();
}
}
}
程序運行結果如下:
例子很簡單,我是按照順序寫的,在代碼中也有詳細的步驟注釋,就不多講了。一般經驗來講,自定義的東西往往是很有用的,而往往也不是人人能夠掌握。