91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#語言知識點整理 - 事件

發布時間:2020-07-07 10:13:06 來源:網絡 閱讀:771 作者:勇闖天涯X 欄目:編程語言

一、事件的感性認識:

    現實生活中的“事件”無所不在,時刻都在發生,軟件層面上的常見事件無非是鼠標事件、鍵盤事件、操作系統自己發出的事件。

    事件的發送方稱作為發布者(sender),接收事件的一方稱作訂閱者(receiver),一個事件可以有多個訂閱者。 一個訂閱者可處理來自多個發布者的多個事件。典型的多對多關系。

    發布者和訂閱者互相都不了解,只是通過Delegate委托來在之間交互,委托在這里起到了“媒人”作用。同時.net的事件機制很容易實現設計模式的觀察者模式。 

二、事件的不嚴格定義:

    1) 事件是特殊類型的多路廣播委托

    2) 向其他類或對象提供通知的一種方式。 

三、例子:

    MSDN上有幾個例子,我綜合了下,作為編寫事件的模板吧

   1:  
   2: using System;
   3: using System.Collections.Generic;
   4: using System.Linq;
   5: using System.Text;
   6:  
   7: namespace CSharp.Event
   8: {
   9:     public delegate void MyEventHandler(string s);
  10:  
  11:     public interface IPublisher
  12:     {
  13:         // 接口可聲明事件。
  14:         event EventHandler<CustomEventArgs> RaiseCustomEvent;
  15:         //自定義事件訪問器,可選
  16:         event MyEventHandler OnMyEvent;
  17:     }
  18:  
  19:     /// <summary>
  20:     /// 自定義EventArgs類,用來保存事件信息
  21:     /// </summary>
  22:     public class CustomEventArgs : EventArgs
  23:     {
  24:         private string message;
  25:  
  26:         public string Message
  27:         {
  28:             get { return message; }
  29:             set { message = value; }
  30:         }
  31:  
  32:         public CustomEventArgs(string s)
  33:         {
  34:             message = s;
  35:         }
  36:  
  37:     }
  38:  
  39:     /// <summary>
  40:     /// 發布者
  41:     /// </summary>
  42:     class Publisher : IPublisher
  43:     {
  44:         object objectLock = new Object();
  45:         //使用EventHandler<T> 聲明事件
  46:         public event EventHandler<CustomEventArgs> RaiseCustomEvent;
  47:         private event MyEventHandler _myEventHandler;
  48:  
  49:         /// <summary>
  50:         ///  在大多數情況下都不需要提供自定義的事件訪問器。
  51:         ///  如果您在代碼中沒有提供自定義的事件訪問器,編譯器會自動添加事件訪問器。
  52:         /// </summary>
  53:         public event MyEventHandler OnMyEvent
  54:         {
  55:             add
  56:             {
  57:                 lock (objectLock)
  58:                 {
  59:                     _myEventHandler += value;
  60:                 }
  61:             }
  62:             remove
  63:             {
  64:                 lock (objectLock)
  65:                 {
  66:                     _myEventHandler -= value;
  67:                 }
  68:             }
  69:         }
  70:  
  71:         public void DoSomething()
  72:         {
  73:             //省略。。。
  74:  
  75:             //自己引發事件
  76:             OnRaiseCustomEvent(new CustomEventArgs("Did something"));
  77:             //省略。。。
  78:  
  79:             if (_myEventHandler != null)
  80:             {
  81:  
  82:                 _myEventHandler("你輕輕的走,不帶走一片云彩!");
  83:             }
  84:  
  85:         }
  86:  
  87:         /// <summary>
  88:         /// 公開protected virtual方法,允許繼承類重寫事件調用行為
  89:         /// </summary>
  90:         /// <param name="e"></param>
  91:         protected virtual void OnRaiseCustomEvent(CustomEventArgs e)
  92:         {
  93:             EventHandler<CustomEventArgs> handler = RaiseCustomEvent;
  94:  
  95:             //如果沒有訂閱者,事件為空
  96:             if (handler != null)
  97:             {
  98:                 e.Message += String.Format(" at {0}", DateTime.Now.ToString());
  99:  
 100:                 //觸發事件
 101:                 handler(this, e);
 102:             }
 103:         }
 104:  
 105:    
 106:     }
 107:  
 108:     /// <summary>
 109:     /// 訂閱者
 110:     /// </summary>
 111:     class Subscriber
 112:     {
 113:         private string id;
 114:         public Subscriber(string ID, Publisher pub)
 115:         {
 116:             id = ID;
 117:             //多路廣播委托實現事件訂閱
 118:             pub.RaiseCustomEvent += HandleCustomEvent;
 119:             pub.OnMyEvent += new MyEventHandler(pub_OnMyEvent);
 120:         }
 121:  
 122:         void pub_OnMyEvent(string s)
 123:         {
 124:             Console.WriteLine(string.Format("{0} 的開場白:{1}", id, s));
 125:         }
 126:  
 127:         /// <summary>
 128:         /// 當訂閱者接收到事件,該做什么反應
 129:         /// 也就是常說的事件處理邏輯
 130:         /// </summary>
 131:         /// <param name="sender"></param>
 132:         /// <param name="e"></param>
 133:         void HandleCustomEvent(object sender, CustomEventArgs e)
 134:         {
 135:             Console.WriteLine(id + " received this message: {0}", e.Message);
 136:         }
 137:     }
 138:  
 139:     class Program
 140:     {
 141:         static void Main(string[] args)
 142:         {
 143:             //實例一個發布者
 144:             Publisher pub = new Publisher();
 145:             //實例兩個訂閱者sub1,sub2,他們計劃收聽pub
 146:             Subscriber sub1 = new Subscriber("sub1", pub);
 147:             Subscriber sub2 = new Subscriber("sub2", pub);
 148:  
 149:             //發布者通過DoSomething觸發事件,開始發布信息
 150:             pub.DoSomething();
 151:  
 152:             Console.WriteLine("Press Enter to close this window.");
 153:             Console.ReadLine();
 154:         }
 155:     }
 156: }
附件:http://down.51cto.com/data/2362519
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汝州市| 桂林市| 庐江县| 石林| 泰和县| 安陆市| 栾川县| 昭平县| 留坝县| 富民县| 雅江县| 临高县| 澄迈县| 荆门市| 垣曲县| 周至县| 合川市| 榆树市| 曲水县| 浙江省| 孟连| 福建省| 运城市| 资溪县| 沙坪坝区| 珲春市| 射洪县| 隆德县| 大化| 乌兰察布市| 西丰县| 广饶县| 郑州市| 吉首市| 孟津县| 九江县| 灌南县| 汾阳市| 乃东县| 新丰县| 化德县|