C#事件處理簡(jiǎn)單分析
C#語(yǔ)言還是比較常見(jiàn)的東西,這里我們主要介紹C#事件處理,包括介紹ActiveX控件的事件接收等方面。
C#事件處理
當(dāng)你寫(xiě)一個(gè)類時(shí),有時(shí)有必要讓類的客戶知道一些已經(jīng)發(fā)生的事件。如果你是一個(gè)具有多年編程經(jīng)驗(yàn)的程序員,似乎有很多的解決辦法,包括用于回調(diào)的函數(shù)指針和用于ActiveX控件的事件接收(event sinks)?,F(xiàn)在你將要學(xué)到另外一種把客戶代碼關(guān)聯(lián)到類通知的辦法——使用事件。
事件既可以被聲明為類域成員(成員變量),也可以被聲明為屬性。兩者的共性為,事件的類型必定是代表元,而函數(shù)指針原形和C#的代表元具有相同的含義。
每一個(gè)事件都可以被0或更多的客戶占用,且客戶可以隨時(shí)關(guān)聯(lián)或取消事件。你可以以靜態(tài)或者以實(shí)例方法定義代表元,而后者很受C++程序員的歡迎。
既然我已經(jīng)提到了事件的所有功能及相應(yīng)的代表元,請(qǐng)看清單5.11中的例子。它生動(dòng)地體現(xiàn)了該理論。
下列代碼在類中實(shí)現(xiàn)C#事件處理:
- using System;
- // 向前聲明
- public delegate void EventHandler(string strText);
- class EventSource
- {
- public event EventHandler TextOut;
- public void TriggerEvent()
- {
- if (null != TextOut) TextOut("Event triggered");
- }
- }
- class TestApp
- {
- public static void Main()
- {
- EventSource evsrc = new EventSource();
- evsrc.TextOut += new EventHandler(CatchEvent);
- evsrc.TriggerEvent();
- evsrc.TextOut -= new EventHandler(CatchEvent);
- evsrc.TriggerEvent();
- TestApp theApp = new TestApp();
- evsrc.TextOut += new EventHandler(theApp.InstanceCatch);
- evsrc.TriggerEvent();
- }
- public static void CatchEvent(string strText)
- {
- Console.WriteLine(strText);
- }
- public void InstanceCatch(string strText)
- {
- Console.WriteLine("Instance " + strText);
- }
- }
【編輯推薦】