程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 聯合Visual C#開辟情況講授C#中事宜的定閱和撤消定閱

聯合Visual C#開辟情況講授C#中事宜的定閱和撤消定閱

編輯:C#入門知識

聯合Visual C#開辟情況講授C#中事宜的定閱和撤消定閱。本站提示廣大學習愛好者:(聯合Visual C#開辟情況講授C#中事宜的定閱和撤消定閱)文章只能為提供參考,不一定能成為您想要的結果。以下是聯合Visual C#開辟情況講授C#中事宜的定閱和撤消定閱正文



類或對象可以經由過程事宜向其他類或對象告訴產生的相干工作。發送(或激發)事宜的類稱為“刊行者”,吸收(或處置)事宜的類稱為“定戶”。
在典范的 C# Windows 窗體或 Web 運用法式中,可定閱由控件(如按鈕和列表框)激發的事宜。可以使用 Visual C# 集成開辟情況 (IDE) 來閱讀控件宣布的事宜,選摘要處置的事宜。IDE 會主動添加空事宜處置法式辦法和定閱事宜的代碼。

事宜概述
事宜具有以下特色:

  • 刊行者肯定什麼時候激發事宜,定戶肯定履行何種操作來呼應該事宜。
  • 一個事宜可以有多個定戶。一個定戶可處置來自多個刊行者的多個事宜。
  • 沒有定戶的事宜永久也不會激發。
  • 事宜平日用於告訴用戶操作,例如,圖形用戶界面中的按鈕單擊或菜單選擇操作。
  • 假如一個事宜有多個定戶,當激發該事宜時,會同步驟用多個事宜處置法式。

在 .NET Framework 類庫中,事宜是基於 EventHandler 拜托和 EventArgs 基類的。

定閱和撤消定閱事宜
假如您想編寫激發事宜時挪用的自界說代碼,則可以定閱由其他類宣布的事宜。例如,可以定閱某個按鈕的 click 事宜,以使運用法式在用戶單擊該按鈕時履行一些有效的操作。
應用 Visual Studio IDE 定閱事宜
假如看不到“屬性”窗口,請在“設計”視圖中,右擊要為其創立事宜處置法式的窗體或控件,然後選擇“屬性”。
在“屬性”窗口的頂部,單擊“事宜”圖標。
雙擊要創立的事宜,例如 Load 事宜。
Visual C# 會創立一個空事宜處置法式辦法,並將其添加到您的代碼中。或許,您也能夠在“代碼”視圖中手動添加代碼。例如,上面的代碼行聲清楚明了一個在 Form 類激發 Load 事宜時挪用的事宜處置法式辦法。

private void Form1_Load(object sender, System.EventArgs e)
{
  // Add your form load event handling code here.
}

還會在項目標 Form1.Designer.cs 文件的 InitializeComponent 辦法中主動生成定閱該事宜所需的代碼行。該代碼行相似於:

this.Load += new System.EventHandler(this.Form1_Load);

以編程方法定閱事宜
界說一個事宜處置法式辦法,其簽名與該事宜的拜托簽名婚配。例如,假如事宜基於 EventHandler 拜托類型,則上面的代碼表現辦法存根:

void HandleCustomEvent(object sender, CustomEventArgs a)
{
  // Do something useful here.
}

應用加法賦值運算符 (+=) 來為事宜附加事宜處置法式。鄙人面的示例中,假定名為 publisher 的對象具有一個名為 RaiseCustomEvent 的事宜。請留意,定戶類須要援用刊行者類能力定閱其事宜。

publisher.RaiseCustomEvent += HandleCustomEvent;

請留意,後面的語法是 C# 2.0 中的新語法。此語法完整等效於必需應用 new 症結字顯式創立封裝拜托的 C# 1.0 語法:

publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

還可以經由過程應用 lambda 表達式添加事宜處置法式:

public Form1()
{
  InitializeComponent();
  // Use a lambda expression to define an event handler.
  this.Click += (s,e) => { MessageBox.Show(
    ((MouseEventArgs)e).Location.ToString());};
}

有關更多信息,請拜見 若何:在 LINQ 內部應用 Lambda 表達式(C# 編程指南)。
應用匿名辦法定閱事宜
假如今後不用撤消定閱某個事宜,則可使用加法賦值運算符 (+=) 將匿名辦法附加到此事宜。鄙人面的示例中,假定名為 publisher 的對象具有一個名為 RaiseCustomEvent 的事宜,而且還界說了一個 CustomEventArgs 類以承載某些類型的公用事宜信息。請留意,定戶類須要援用 publisher 能力定閱其事宜。

publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e)
{
 string s = o.ToString() + " " + e.ToString();
 Console.WriteLine(s);
};

請務必留意,假如應用匿名函數定閱事宜,事宜的撤消定閱進程將比擬費事。這類情形下若要撤消定閱,必需前往到該事宜的定閱代碼,將該匿名辦法存儲在拜托變量中,然後將此拜托添加到該事宜中。普通來講,假如必需在前面的代碼中撤消定閱某個事宜,則建議您不要應用匿名函數定閱此事宜。

撤消定閱
要避免在激發事宜時挪用事宜處置法式,請撤消定閱該事宜。要避免資本洩漏,應在釋放定戶對象之前撤消定閱事宜。在撤消定閱事宜之前,在宣布對象中作為該事宜的基本的多路播送拜托會援用封裝了定戶的事宜處置法式的拜托。只需宣布對象堅持該援用,渣滓收受接管功效就不會刪除定戶對象。
撤消定閱事宜
應用減法賦值運算符 (-=) 撤消定閱事宜:

publisher.RaiseCustomEvent -= HandleCustomEvent;

一切定戶都撤消定閱事宜後,刊行者類中的事宜實例將設置為 null。

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