国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CLRviaC#深解筆記五-事件

2019-11-14 13:33:26
字體:
來源:轉載
供稿:網友
事件處理實際上是一種具有特殊簽名的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方法
 
 
 
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武邑县| 郯城县| 克东县| 庄浪县| 开原市| 台前县| 星子县| 冷水江市| 灵寿县| 长汀县| 萍乡市| 米易县| 绥阳县| 温州市| 连城县| 大宁县| 介休市| 环江| 双牌县| 庐江县| 赤峰市| 苗栗县| 花垣县| 重庆市| 鹤壁市| 冕宁县| 乐亭县| 九台市| 五华县| 澄江县| 固阳县| 那曲县| 墨脱县| 团风县| 吉安县| 五寨县| 富阳市| 安阳市| 茂名市| 文山县| 广汉市|