CLR via C 深解筆記五 事件

2022-02-14 12:03:09 字數 863 閱讀 3603

事件處理實際上是一種具有特殊簽名的delegate, 像這個樣子:public delegate void eventhandler(object sender, eventargs e);

型別定義事件成員,就可以通知其他物件發生了特定的事情。如果定義乙個事件成員,意味著型別要提供一下能力:

#1,方法可登記也可登出它對該事件的關注

#2,該事件發生時,登記了的方法會收到通知。

型別之所以能夠提供事件通知功能,是因為型別維護了乙個已經登記方法的列表。事件發生後,型別將通知列表中所有已登記的方法。

clr事件模型建立在委託的基礎上。委託是呼叫(invoke)**方法的一種型別安全的方式。物件憑藉**方法接收他們訂閱的通知。

---------

invoke和call

在英語的語境中,invoke和call的區別在於,在執行乙個所有資訊都已知的方法時,用call比較恰當。

這些資訊包括要引用的型別、方法的簽名以及方法名。

但是,在需要先「喚出」某個東西來幫你呼叫乙個資訊不明的方法時,用invoke就比較恰當。

這個onboiled方法的問題在於,執行緒可能發現boiled不為null, 然後,就在呼叫之前,另乙個執行緒從委託鏈中移除乙個委託,使boiled變成了null,還會丟擲乙個nullreferenceexception異常。為了修正這個競態問題,可以像下面這樣寫onboiled方法

CLR via C 深解筆記六 泛型

物件導向程式設計乙個好處就是 重用 極大提高了開發效率。如是,可以派生出乙個類,讓它繼承基類的所有能力,派生類只需要重寫虛方法,或新增一些新的方法,就可以定製派生類的行為,使之滿足開發人員的需求。泛型 generic 是clr和程式語言提供的一種特殊機制,它支援另一種形式的 重用,即 演算法重用 簡...

CLR VIA C 學習筆記(1)

c 被編譯器拿去編譯生成il,32位的生成pe32 header,64位 生成pe32 header.還有clr header metadata il。pe32 pe32 header 包含目標平台是64還是32位系統,檔案型別 gui,cui,dll clr header clr 版本,模組大小,...

CLR via C 學習筆記 型別

類的記憶體分配 關鍵字 abstract 類 該類不能構建例項 方法 屬性 事件 表示構建派生型別的例項之前派生型別必須重寫並實現這個成員 常量 字段 不允許 virtual 類 不允許 方法 屬性 事件 表示這個成員可以由派生類重寫 常量 字段 不允許 override 類 不允許 方法 屬性 事...