程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> CLR via C#深解筆記五,

CLR via C#深解筆記五,

編輯:C#入門知識

CLR via C#深解筆記五,


事件處理實際上是一種具有特殊簽名的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方法        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved