程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> C#事件訪問器

C#事件訪問器

編輯:更多關於編程

      我們可以通過為事件定義事件訪問器,來控制事件運算符+=、-=運算符的行為

      有兩個訪問器:add和remove

      聲明事件的訪問器看上去和聲明一個屬性差不多

      下面示例演示了具有訪問器的聲明.兩個訪問器都有叫做value的隱式值參數,它接受實例或靜態方法的引用

      public event EventHandler Elapsed

      {

      add

      {

      //... 執行+=運算符的代碼

      }

      remove

      {

      //... 執行-=運算符的代碼

      }

      }

      聲明了事件訪問器後,事件不包含任何內嵌委托對象.我們必須實現自己的機制來存儲和移除事件的方法

      事件訪問器表現為void方法,也就是不能使用會返回值的return語句

      完整示例:

      //聲明一個delegate

      delegate void EventHandler();

      class MyClass

      {

      //聲明一個成員變量來保存事件句柄(事件被激發時被調用的delegate)

      private EventHandler m_Handler = null;

      //激發事件

      public void FireAEvent()

      {

      if (m_Handler != null)

      {

      m_Handler();

      }

      }

      //聲明事件

      public event EventHandler AEvent

      {

      //添加訪問器

      add

      {

      //注意,訪問器中實際包含了一個名為value的隱含參數

      //該參數的值即為客戶程序調用+=時傳遞過來的delegate

      Console.WriteLine("AEvent add被調用,value的HashCode為:" + value.GetHashCode());

      if (value != null)

      {

      //設置m_Handler域保存新的handler

      m_Handler = value;

      }

      }

      //刪除訪問器

      remove

      {

      Console.WriteLine("AEvent remove被調用,value的HashCode為:" + value.GetHashCode());

      if (value == m_Handler)

      {

      //設置m_Handler為null,該事件將不再被激發

      m_Handler = null;

      }

      }

      }

      }

      class Program

      {

      static void Main(string[] args)

      {

      MyClass obj = new MyClass();

      //創建委托

      EventHandler MyHandler = new EventHandler(MyEventHandler);

      MyHandler += MyEventHandle2;

      //將委托注冊到事件

      obj.AEvent += MyHandler;

      //激發事件

      obj.FireAEvent();

      //將委托從事件中撤銷

      obj.AEvent -= MyHandler;

      //再次激發事件

      obj.FireAEvent();

      Console.ReadKey();

      }

      //事件處理程序

      static void MyEventHandler()

      {

      Console.WriteLine("This is a Event!");

      }

      //事件處理程序

      static void MyEventHandle2()

      {

      Console.WriteLine("This is a Event2!");

      }

      }

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved