天天看點

C#基礎知識回顧--委托事件下面我們分析下把各個部分連接配接起來

       當發球的球員産生它的發球事件之前,其他球員需要訂購這個事件,采用這種方式,隻要出現一個發球事件,其他球

員就能夠知道。

       當球被發出時,此時發球員對象産生一個新事件。

         建立一個新事件,這個事件還有一些參數,如球的距離和軌迹。這些參數作為EventArgs對象的一個執行個體關聯到事件,然後

事件發出,所有監聽對象都能得到這個事件。一旦事件産生,所有訂購者都會得到通知,并做一些處理。

            由于其他球員對象都訂購了發球球員對象的發球事件,是以這些對象會得到通知,并先後調用他們的事件處理方法。事件處

理程式就是産生事件時訂購者對象運作的方法,一旦發球者産生了其事件,就會建立一個BallEventArgs對象,其中包含球的軌迹

和距離,進而将個對象傳遞到訂購者的事件處理程式。

           現在,其他球員都會以他們自己的方式處理發球事件。不過并不是同時運作---他們的事件處理程式會先後得到調用,并以

BallEventArgs對象的一個引用作為參數。     

        要記住,Play事件(我們下面把發球事件都說成play事件)有一些需要攜帶的參數。是以我們需要一個簡單的對象來表示這些參數。

為此,.NET 提供了一個标準的類,名為EventArgs,不過這個類沒有任何成員。它的目的隻有一個,就是允許将你的事件的參數對象傳

遞到事件事件處理程式加以使用。 以下是事件參數類的聲明:

     public class BallEventArgs:EventArgs

      我們在SendPlayer類中(就是發球球員類,汗,英文不是太好,見諒)定義一個事件,以便其他對象訂購這個事件。

聲明如下:

      public event EventHandler Play;

event關鍵字後面的EventHandler不是C#的保留字,它是.NET提供的。之是以需要它,是為了告訴訂購事件的對象。 他們的事件處理方法應該是什麼樣子(有怎樣的簽名) 即他們的事件處理程式應當有兩個參數,一個參數是名為sender的object,另一個參數是名為e的EventArgs引用。

          訂購SendPlayer的Play事件的各個對象都需要一個事件處理程式。其實我們早就知道事件處理程式是如何工作的,

你拉一個Button,然後輕按兩下它,IDE就自動給你增加一個click事件。是以Play的事件你看起來應該很熟悉。

             void  sendPlayer_Play(object sender,EventArgs e)

C#中并沒有規則要求事件處理程式必須按某種方式命名,不過這是一種非常标準的命名約定:首先是對象引用名, 後面一個下劃線,再後面是事件名。
一旦建立了事件處理程式,其他球員對象需要關聯他們自己的事件處理程式。每個對象都有自己特定的 sendPlayer_Play方法,對這個事件做出不同的響應。是以, 如果有一個SendPlayer對象引用變量或字段,名為sendPlayer,可以用+=操作符關聯事件處理程式: sendPlayer.Play+=new EventHandler(sendPlayer_Play);
既然已經建立事件,那麼觸發這個事件就很容易,隻需要調用Play事件。 if(Play!=null) Play(this,e); 基本的步驟都有了,大家可以按照步驟寫自己的事件了。

繼續閱讀