C#事件訪問器

來源:互聯網
上載者:User

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

  有兩個訪問器: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!");

  }

  }

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。