事件是用戶操作,例如:按鍵,點(diǎn)擊,鼠標(biāo)移動(dòng)等,或者某些事件,例如:系統(tǒng)生成的通知。應(yīng)用程序需要響應(yīng)事件發(fā)生時(shí)。 例如,中斷。事件用于進(jìn)程間通信。
事件在類中聲明和引發(fā),并使用同一個(gè)類或其他類中的委托與事件處理程序相關(guān)聯(lián)。包含事件的類用于發(fā)布事件。這被稱為發(fā)布者類。接受這個(gè)事件的其他類被稱為訂閱者類。事件使用發(fā)布者訂閱者模型。
發(fā)布者是一個(gè)包含事件和委托的定義的對(duì)象。事件委托關(guān)聯(lián)也在此對(duì)象中定義。 發(fā)布者類對(duì)象調(diào)用該事件,并將其通知給其他對(duì)象。
訂閱者是接受事件并提供事件處理程序的對(duì)象。發(fā)布者類中的委托調(diào)用訂閱者類的方法(事件處理程序)。
要在類中聲明事件,首先必須聲明事件的委托類型。 例如,
public delegate string MyDel(string str);
接下來(lái),使用event關(guān)鍵字聲明事件:
event MyDel MyEvent;
上面的代碼定義了一個(gè)名稱為BoilerLogHandler的委托和一個(gè)名稱為BoilerEventLog的事件,它在引發(fā)時(shí)調(diào)用委托。
using System;
namespace SampleApp {
public delegate string MyDel(string str);
class EventProgram {
event MyDel MyEvent;
public EventProgram() {
this.MyEvent += new MyDel(this.WelcomeUser);
}
public string WelcomeUser(string username) {
return "Welcome " + username;
}
static void Main(string[] args) {
EventProgram obj1 = new EventProgram();
string result = obj1.MyEvent("Yiibai Yiibai");
Console.WriteLine(result);
}
}
}
當(dāng)上述代碼被編譯并執(zhí)行時(shí),它產(chǎn)生以下結(jié)果:
Welcome Yiibai Point