這是個人學習中對事件的一點點初步理解,希望高手能指點一下!
事件:個人認為只有相當於控制項的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 事件的理解
說實話,事件弄得還是很暈,有待於以後的強化吧,下面是我對事件的一點理解 首先,參見大牛的帖子 網上大牛事件講解 下面我來說一說事件的大致流程 事件委託 事件概述 事件就是當物件或類狀態發生改變時,物件或類發出的資訊或通知。發出資訊的物件或類稱為 事件源 對事件進行處理的方法稱為 接收者 通常事件源在...