簡單記錄點東西 適合似懂非懂的朋友看看委託型別用來定義和響應應用程式中的**。
藉此可以設計各種有物件導向特性的**模式。下面要說的事件在我看來就是委託的一種實現,再深一步講,利用委託加事件,是不是可以構建各種所謂的管道框架。
如
asp.net webapi
的管道模型,整個訊息處理管道是通過一組有序的httpmessaghandler
「首尾相連」而成,具體實現「串聯」的是通過delegatinghandler
這個型別來完成的。即是一組委託鏈
。
最精華的內容您已看完
委託定義 public delegate int delename(int x);名稱引數
返回值
delename del = m1;
public int m1(int i)
入門理解1:委託是方法的型別,即委託=class,方法=new class()
上面的方法名稱m1只起到傳遞作用時,可以用匿名委託代替:
delename del = delegate (int i)
;
除了用匿名委託,還可以用lamda表示式進行代替:
delename del = (int i)=>
;
public delegate void mygenericdelegate1(t arg);
public delegate int mygenericdelegate2(t arg,m name);
mygenericdelegate1inttarget = new mygenericdelegate(inttarget);
static void inttarget(int arg) => console.writeline($"inttarget--> ");
mygenericdelegate2inttarget1 = (int arg,string name) =>
;
好處:封裝為了復用
看下上面兩個委託的命名:mygenericdelegate1 mygenericdelegate2 純粹為了取名而取名,此時我們可以不自己取名。
怎麼做呢,c#本身提供了兩個泛型委託可以給我們使用,且可滿足大多數場景。
action<>:無返回值: 定義 public delegate void action<...>
public static void show()
// action<> 委託的乙個目標
private static void displaymessage(string msg, consolecolor txtcolor, int printcount)
func<>:有返回值 public delegate tresult func<... out tresult> tresult:返回值型別
funcfunctarget = new func(add);
functarget(1, 2);
static int add(int x, int y) => x + y;
如果你覺得乙個具有自定義名稱的委託更有助於捕獲問題範疇,那麼構建自定義委託不過就是一行**的事兒。
注:linq中就大量的用到了 action<> 和 func<>。
最簡單的說法是:可以把事件看成是委託的乙個例項。委託比作類:它定義了函式的簽名(接受什麼型別的引數 返回什麼型別的值)事件比作委託new出來的乙個例項,是具有該委託簽名的具體函式。當然事件和例項也是有區別的:
1、事件這個東西 能容納很多個具體的函式(通過+= -= 增加刪除)。
2、事件有event關鍵字起到了保護作用不允許改變事件的引用。即在宣告事件的類外部不能用=對事件物件賦值
public delegate void helloworlddelegate(string name);
public class helloworldclass2
;//在宣告事件的類內部可以用=直接定義事件的引用(賦值)
del(name);}}
class program
static void byenglish(string name)
static void bychinese(string name)
}
事件預設是個多播委託,什麼是多播委託呢?就是上面的h2.del委託容納的方法有多個,byenglish跟bychinese,用+=可以繼續往下延伸。
委託和事件的區別在於,事件是個規約,委託是個實現(當然抽象上的委託也可以不是個具體的實現)。
規約的含義是,我定義了這麼個語法,你可以通過+=和-=把委託掛載到這個東西(事件)上,當發生這個事件的時候,我會確保這些委託都被得到呼叫。但是具體是怎麼呼叫的,你不用關心。
原文:
C 事件與委託簡單實現
假設我們有個高檔的熱水器 heater 我們給它通上電,當水溫超過95度的時候 1 揚聲器 alarm 會開始發出語音,告訴你水的溫度 2 液晶屏 display 也會改變水溫的顯示,來提示水已經快燒開了。可以建立如下事件與委託 在控制台下實現 heater.cs using system usin...
C 學習筆記 委託與事件
委託是一種程式特性,用於表示方法 方法的代表,方法的指標 通俗來說就是自己做不了的,通過委託任務給別人來完成。在委託中,可以動態的增加或刪減具體方法與委託變數的關聯。多播委託是指委託變數中有多個具體方法,委託變數執行時會按照具體方法加入的先後順序,執行具體方法。1 宣告委託 1 宣告委託 publi...
C語言簡單筆記
因為疫情原因,原本線下進行的c語言程式設計只能改為線上學習,學習效果不是很好,因此趁暑假的機會回顧一下c語言的主要知識。今天覆習的主要內容 資料型別,常量與變數。一 資料型別 c語言中,資料對使用者的呈現方式分為常量和變數,並且常量和變數都有不同的型別。具有相同性質的資料的集合可以看成一種資料型別。...