您好,登錄后才能下訂單哦!
這篇文章主要介紹“C#中的EventHandler觀察者模式怎么實現”,在日常操作中,相信很多人在C#中的EventHandler觀察者模式怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#中的EventHandler觀察者模式怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
C# 和 java 比較:java 中使用的是接口。C# 使用委托機制,可以用時 + 運算符進行注冊,直接多播。而 java 中是一般是使用一個集合來保存觀察者。
發布者(Publisher)= 被觀察者(Observable) = 事件源(java中的EventObject,C#中的sender)
訂閱者(Subscriber)=觀察者(Observer)= 接收者(java中繼承EventLister,接口, 或Observer接口, C#由于委托機制,不需要繼承接口,直接按EventHandler實現回調方法)
在發生其他類或對象關注的事情時,類或對象可通過事件通知它們。發送(或引發)事件的類稱為“發行者”,接收(或處理)事件的類稱為“訂戶”。在典型的 C# Windows 窗體或 Web 應用程序中,可訂閱由控件(如按鈕和列表框)引發的事件。可使用 Visual C# 集成開發環境 (IDE) 來瀏覽控件發布的事件,選擇要處理的事件。IDE 會自動添加空事件處理程序方法和訂閱事件的代碼。
EventHandler 為 C# 中的預定義委托,專用于表示不生成數據的事件的事件的處理程序方法。
public delegate void EventHandler(Object sender, EventArgs e)
1. 發行者確定何時引發事件,訂戶確定執行何種操作來響應該事件。
2. 一個事件可以有多個訂戶。一個訂戶可處理來自多個發行者的多個事件。
3. 沒有訂戶的事件永遠不會被調用。
4. 事件通常用于通知用戶操作(如:圖形用戶界面中的按鈕單擊或菜單選擇操作)。
5. 如果一個事件有多個訂戶,當引發該事件時,會同步調用多個事件處理程序。要異步調用事件,請參見使用異步方式調用同步方法。
6. 可以利用事件同步線程。
7. 在 .NET Framework 類庫中,事件是基于 EventHandler 委托和 EventArgs 基類的。
實例代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAppEventArgs { public class Program { public static void Main(string[] args) { Publisher pub = new Publisher(); Subscriber sub1 = new Subscriber("sub1",pub); Subscriber sub2 = new Subscriber("sub2", pub); // 調用這個方法來產生事件 pub.DoSomething(); Console.WriteLine("Press Enter to close this window."); Console.ReadLine(); } } /// <summary> /// 自定義一個事件類來保存事件信息 /// </summary> public class CustomEventArgs : EventArgs public CustomEventArgs(string s) private string message; public string Message get { return message; } set { message = value; } /// 廣播事兒件的類 public class Publisher //使用EventHandler<T> 聲明一個事件 public event EventHandler<CustomEventArgs> RaiseCustomEvent; public void DoSomething() //DoSomething………… // 你也可以再觸發事件前,執行一些其他的代碼 OnRaiseCustomEvent(new CustomEventArgs("Did something,hi 這是事件消息")); protected virtual void OnRaiseCustomEvent(CustomEventArgs e) // 定義一個局部變量,已防止最后一個訂閱者剛好在檢查null后取消訂閱 EventHandler<CustomEventArgs> handler = RaiseCustomEvent; // 如果沒有 訂閱者(觀察者), 委托對象將為null if (handler != null) { // 格式化事件消息中 的字符串 e.Message += String.Format(" at {0}", DateTime.Now.ToString()); // 這是最重要的一句。 // 此時執行的 handler已經是一個多播委托(如果有多個訂閱者或觀察者注冊)。 // 既然是多播委托,就可以依次調用各個 回調函數 (既然是回調函數,實際的執行就由訂閱者類決定)。 //這里面傳入一個this, 就代表 事件源(或發布者 或 被觀察者 都一個意思) handler(this, e); } /// 用來注冊事件的類 public class Subscriber private string id; public Subscriber(string ID, Publisher pub) id = ID;//注冊這個動作,應該有訂閱者主動進行,并且可以再后期取消注冊 pub.RaiseCustomEvent += HandleCustomEvent; // 實現回調函數。在事件發生后,執行什么樣的操作。這里只是簡單的打印信息。 void HandleCustomEvent(object sender, CustomEventArgs e) //這就是實際的操作。 Console.WriteLine(id + " received this message: {0}", e.Message); }
到此,關于“C#中的EventHandler觀察者模式怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。