a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C#中的委托和事件學(xué)習(xí)(續(xù))

2024-09-07 17:05:18
字體:
供稿:網(wǎng)友

引言

如果你看過了 C#中的委托和事件 一文,我想你對委托和事件已經(jīng)有了一個基本的認識。但那些遠不是委托和事件的全部內(nèi)容,還有很多的地方?jīng)]有涉及。本文將討論委托和事件一些更為細節(jié)的問題,包括一些大家常問到的問題,以及事件訪問器、異常處理、超時處理和異步方法調(diào)用等內(nèi)容。

為什么要使用事件而不是委托變量?

在 C#中的委托和事件 中,我提出了兩個為什么在類型中使用事件向外部提供方法注冊,而不是直接使用委托變量的原因。主要是從封裝性和易用性上去考慮,但是還漏掉了一點,事件應(yīng)該由事件發(fā)布者觸發(fā),而不應(yīng)該由客戶端(客戶程序)來觸發(fā)。這句話是什么意思呢?請看下面的范例:

NOTE:注意這里術(shù)語的變化,當(dāng)我們單獨談?wù)撌录覀冋f發(fā)布者(publisher)、訂閱者(subscriber)、客戶端(client)。當(dāng)我們討論Observer模式,我們說主題(subject)和觀察者(observer)。客戶端通常是包含Main()方法的Program類。

class Program {   static void Main(string[] args) {     Publishser pub = new Publishser();     Subscriber sub = new Subscriber();          pub.NumberChanged += new NumberChangedEventHandler(sub.OnNumberChanged);     pub.DoSomething();     // 應(yīng)該通過DoSomething()來觸發(fā)事件    pub.NumberChanged(100);   // 但可以被這樣直接調(diào)用,對委托變量的不恰當(dāng)使用  } }// 定義委托public delegate void NumberChangedEventHandler(int count);// 定義事件發(fā)布者public class Publishser {   private int count;   public NumberChangedEventHandler NumberChanged;     // 聲明委托變量  //public event NumberChangedEventHandler NumberChanged; // 聲明一個事件  public void DoSomething() {     // 在這里完成一些工作 ...     if (NumberChanged != null) {  // 觸發(fā)事件      count++;       NumberChanged(count);     }   } }// 定義事件訂閱者public class Subscriber {   public void OnNumberChanged(int count) {     Console.WriteLine("Subscriber notified: count = {0}", count);   } }

上面代碼定義了一個NumberChangedEventHandler委托,然后我們創(chuàng)建了事件的發(fā)布者Publisher和訂閱者Subscriber。當(dāng)使用委托變量時,客戶端可以直接通過委托變量觸發(fā)事件,也就是直接調(diào)用pub.NumberChanged(100),這將會影響到所有注冊了該委托的訂閱者。而事件的本意應(yīng)該為在事件發(fā)布者在其本身的某個行為中觸發(fā),比如說在方法DoSomething()中滿足某個條件后觸發(fā)。通過添加event關(guān)鍵字來發(fā)布事件,事件發(fā)布者的封裝性會更好,事件僅僅是供其他類型訂閱,而客戶端不能直接觸發(fā)事件(語句pub.NumberChanged(100)無法通過編譯),事件只能在事件發(fā)布者Publisher類的內(nèi)部觸發(fā)(比如在方法pub.DoSomething()中),換言之,就是NumberChanged(100)語句只能在Publisher內(nèi)部被調(diào)用。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 草的我好爽| 手机在线成人免费视频 | 日韩在线免费 | 99久久99久久精品国产片果冻 | 久久精品这里热有精品 | 中文字幕一区二区三区不卡 | 中文字幕亚洲区 | 欧美视频一区二区 | 欧美日韩成人在线播放 | 色视频网站免费看 | 十环传奇在线观看完整免费高清 | 国产999精品久久久影片官网 | 久久国产精品久久久久久 | 蜜臀精品久久久久久蜜臀 | 三级特黄特色视频 | 日本黄色一区二区 | 国产精品美女高潮无套久久 | 色综网| 欧美乱妇高清无乱码 | 中文字幕综合在线分类 | 女人夜夜春高潮爽a∨片传媒 | 日韩精品 电影一区 亚洲 | 成人1区2区 | 日本淫片 | 国产精品久久久久久久久久新婚 | 日韩中文字幕电影在线观看 | 久久草草影视免费网 | 亚洲va一区二区 | 成人av观看 | 欧美日韩精品区 | 在线成人av | 黄色影院免费观看 | 日韩欧美在线播放 | 日韩国产欧美一区 | www久| 欧美精品日韩 | 欧美一区二区免费 | 久久久久中文字幕 | 欧美日韩不卡合集视频 | 国产成在线观看免费视频 | 高清国产一区二区三区 |