委托,深入淺出才是王道(三)


開發基於對象的應用程序,有時候需要使用一種對象通信方式,在一個對象中發生了一些事情時,就需要通知其他對象。這里用到了事件。

委托就用做應用程序接受到消息時封裝事件的方式。

一、接收器、發送器

事件接收器是指在發生某些事情時被通知的任何應用程序或對象

事件發送器可以是是應用程序中的另一個對象或程序集,作用是引發事件,如:點擊按鈕,發送器就是.NET運行庫。需要注意的是,事件發送器並不知道接收器是誰,這就使得事件非常有用。

現在,在事件接收器的某個地方有一個方法,他負責處理事件。在每次發生已注冊的事件時,就執行這個方法。由於發送器不知道接收器是誰,所以無法設置兩者之間的引用類型,這時就需要委托作為中介了。

發送器定義接收器要使用的委托,接收器把事件處理方法注冊到事件中。鏈接事件處理方法的過程稱為封裝事件。

下面來看一個例子,創建一個winform程序,從工具箱拖入一個Button並取名為evenTest,定義一個負責處理事件的方法:click_test()

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        eventTest.Click += click_test;
//this.eventTest.Click += new System.EventHandler(this.click_test); }
private void click_test(object sender, EventArgs e) { MessageBox.Show(@"我是事件處理程序!"); } }

在構造函數中的初始化方法后面加上委托相關代碼 eventTest.Click += click_test;

表示把處理程序click_test()賦予Click事件的委托

這將告訴運行庫,在引發evenTest按鈕的Click事件時,執行click_test方法,其實這個代碼可以自動生產,只需要在設計面板雙擊按鈕,ms會自動生產click方法和委托代碼,在Designer.cs文件中的InitializeComponent()方法中可以找到

this.eventTest.Click += new System.EventHandler(this.eventTest_Click);
//縮寫為:evenTest.Click += eventTest_Click;

前面的代碼中是筆者自己定義的方法名,並不規范,事件方法命名應按照約定遵循“object_event”,object是引發事件的對象,event就是被引發的事件,為了代碼的可讀性,筆者覺得還是應該遵循這一規則。

注意:

      1、處理事件的方法必須是void,不能有返回值;

      2、只要是使用EventHandler委托,參數就應該是objec和EventArgs,第一個參數是引發事件的對象,第二個參數EventArgs是包含有關事件的其他有用信息的對象。這個參數可以是任何類型,只要它派生自EventArgs即可。

 

后一篇:自己定義EventArgs,還原事件實現真相


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM