委託,delegate,說白了也就是個語法糖.沒有他我們可以寫程式,有了他我們可以寫出更好的程式.
delegatevoid feedback(int value);
方法簽名之前前加上 delegate 關鍵字,我們就定義了乙個最簡單的委託.但,事實上編譯器為我們做了另一件事:建立委託類.人肉解壓縮一下:
//這裡就是整個委託最為核心的內容,委託 = 封裝了的類 + invoke方法class
feedback : system.multicastdelegate
注意生成的 invoke 方法,這個方法的和原來使用 delegate 建立的 方法簽名 原型是一致的. 可以說 委託 並不是一種新的操作或者行為之類的.他只是簡化了以前我們需要通過手動編碼的複雜程度.原來需要編寫乙個類來進行操作的步驟,現在由編譯器幫我們完成了,這個就是語法糖,這個就是委託.
多播委託,或者委託鏈,這個是什麼,其實就是在 編譯器 建立的 feedback 類中加入的乙個陣列,如果有多個委託方法連線到乙個委託上,執行的時候就相當於 foreach 這個陣列,每個方法 執行一下他的 invoke. 這個陣列放在**,其實就在繼承的 system.multicastdelegate 中,他有乙個私有成員變數, _invocationlist,這是個陣列,每次增加或者刪除乙個委託就是在進行維護這個 委託 陣列的操作.
//多播委託的 invoke 方法執行類似下面的偽**
public
void invoke(int
value)
else
}
另:可以通過 geti
nvocationlist()方法來獲取多播委託繫結的成員.
泛型委託,就是系統中的 action 和 func,你可以在mscorlib.dll 和 system.core.dll 中找到他們,建議使用這些委託型別而不是定義更多的型別.
publicdelegate
void
action();
public
delegate
void action(t obj);
public
delegate
void action(t1 arg1, t2 arg2);
public
delegate
void action(t1 arg1, t2 arg2,t3 arg3);
...public
delegate tresult func();
public
delegate tresult func(t obj);
public
delegate tresult func(t1 arg1, t2 arg2);
public
delegate tresult func(t1 arg1, t2 arg2,t3 arg3);
...
c#為委託提供了很多簡化的語法,比如委託連的 += 和 -= 操作實際上是delegate類中 combine 和 remove 方法的簡化, lambda 表示式實際上是匿名方法的一種簡化,匿名方法實際上在編譯的時候由編譯器自己生成了乙個方法 ... 這些簡化很有效的提高了我們的開發效率,但也讓一部分開發者感到迷茫.就如一句話所說:知道真相使你自由.明白其中的原理也會讓你更合理的使用這些語法糖,而不至於迷失在糖罐中.
簡化語法1: 不需要構造委託物件
button1.click += neweventhandler(button1_click);
//可以簡化為
button1.click += button1_click;
實際上,第二種情況下在編譯的時候會由編譯器自行加上包裝器.
簡化語法2: 不需要定義**方法
可以理解為lambda 表示式和匿名函式,編譯的時候也是由編譯器"解壓"為正常的方法和類.
簡化語法3: 區域性變數不需要手動包裝到類中即可傳給**方法
jeffrey richter的乙個小規則:如果需要在**的方法中包含3行以上的**,就不使用 lambda表示式.
委託和反射,兩個重要的方法:
delegate del =delegate.createdelegate(...);del.dynamicinvoke(...)
//偽**,不多解釋,只是說明方法名和所在的位置
漫話CLR 定製Attribute
用了10頁紙來講attribute,其實重點只有這段話 所謂 定製attribute 就是乙個類的例項,它被序列化成為駐留在元資料中的乙個位元組流.在執行的時候,可以對元資料中包含的位元組進行反序列化,從而構造類的乙個例項.簡而言之,就是對乙個類的附加描述資訊.我個人理解為編譯到程式中的 注釋 這裡...
漫話成語 謠言
良言一句三冬暖,惡語相加徹骨寒。比惡語更可怕的就是謠言!今天我們就一起來看幾個與謠言有關的成語與典故吧。1.三人成虎 釋義 三個人謊報城市裡有老虎,聽的人就信以為真。比喻說的人多了,就能使人們把謠言當作事實。典故 原文 戰國策 魏策二 龐蔥與太子質於邯鄲,謂魏王曰 今一人言市有虎,王信之乎?王曰 否...
漫話密碼儲存
密碼是用來進行鑑權 身份認證 一種手段,說白了就是證明你是誰。一般鑑權都可以總結為下面3種形式 你知道什麼?如密碼,密碼提示問題等 你有什麼?如信用卡,token卡等 你是什麼?如指紋識別,瞳孔識別等 常見的針對密碼的攻擊方式有 暴力破解 brute force 字典攻擊 dictionary at...