事件的理解

2021-04-01 01:18:49 字數 1618 閱讀 5120

這是個人學習中對事件的一點點初步理解,希望高手能指點一下!

事件:個人認為只有相當於控制項的object才可能有,所以,事件都是控制項的乙個屬性。

先看一下msdn中的一段解釋(這是給控制項建立事件的一般步驟):

1.宣告事件若要在類內宣告事件,首先必須宣告該事件的委託型別(如果尚未宣告的話)。

public delegate void changedeventhandler(object sender, eventargs e);

委託型別定義傳遞給處理該事件的方法的一組引數。多個事件可共享相同的委託型別,因此僅當尚未宣告任何合適的委託型別時才需要執行該步驟。

接下來,宣告事件本身。

public event changedeventhandler changed;

宣告事件的方法與宣告委託型別的字段類似,只是關鍵字 event 在事件宣告前面,在修飾符後面。事件通常被宣告為公共事件,但允許任意可訪問修飾符。

2.呼叫事件類宣告了事件以後,可以就像處理所指示的委託型別的字段那樣處理該事件。如果沒有任何客戶將委託與該事件掛鉤,該字段將為空;否則該欄位引用應在呼叫該事件時呼叫的委託。因此,呼叫事件時通常先檢查是否為空,然後再呼叫事件。

if (changed != null)

changed(this, e);

呼叫事件只能從宣告該事件的類內進行。

3.與事件掛鉤從宣告事件的類外看,事件像個字段,但對該字段的訪問是非常受限制的。只可進行如下操作:

在該字段上撰寫新的委託。

從欄位(可能是復合字段)移除委託。

使用 += 和 -= 運算子完成此操作。為開始接收事件呼叫,客戶**先建立事件型別的委託,該委託引用應從事件呼叫的方法。然後它使用 += 將該委託寫到事件可能連線到的其他任何委託上。

// add "listchanged" to the changed event on "list":

list.changed += new changedeventhandler(listchanged);

當客戶**完成接收事件呼叫後,它將使用運算子 -= 從事件移除其委託。

// detach the event and delete the list:

list.changed -= new changedeventhandler(listchanged);

對於其中第三個步驟個人認為這樣理解更合適一點:

3.當外部使用該類(控制項)的時候,只需給該類的事件屬性賦上乙個相應的值即可(委託型別,一般是eventhandler型別,並給委託一格處理函式,用+=或者-=操作)。

//當宣告該控制項後直接賦值就行了,不在需要什麼event等的事件宣告

即list.changed -= new changedeventhandler(listchanged);//

然後完成listchaged函式即可

這是我寫的一控制項事件,其中的**可能很爛也不實用,但是希望能通過它來理解事件即可;

寫的很菜,如果大家,請多多指點!

選擇自 foyuan 的 blog

作者blog:http://blog.csdn.***/foyuan/

對事件的理解

事件類似於異常,因為它們都是由物件引發。訂閱乙個事件的含義是提供 在事件發生時執行這些 它們稱為事件處理程式。事件處理程式本身都是簡單的函式。對事件處理函式的惟一限制是它必須匹配於事件所要求的簽名 返回型別和引數 這個簽名是事件定義的一部分,由乙個委託指定。要處理事件,需要提供乙個事件處理函式 該函...

關於事件的理解

1.事件基於delegate機制 2.理解事件可以從事件發行者和事件訂閱者著手 1.定義乙個委託,如 public delegate void eventcallback string empid,double salary 2.在事件發行者中定義乙個事件,並且使用之前聲名的委託進行溝通 如 pub...

C 事件的理解

說實話,事件弄得還是很暈,有待於以後的強化吧,下面是我對事件的一點理解 首先,參見大牛的帖子 網上大牛事件講解 下面我來說一說事件的大致流程 事件委託 事件概述 事件就是當物件或類狀態發生改變時,物件或類發出的資訊或通知。發出資訊的物件或類稱為 事件源 對事件進行處理的方法稱為 接收者 通常事件源在...