理解委托(delegate)及为什么要使用委托
委托:是一種定義方法簽名的類型。?當實例化委托時,您可以將其實例與任何具有兼容簽名的方法相關聯。?您可以通過委托實例調用方法。
上述為官方說法,理解起來比較難,舉個生活中的例子:
某人有三子,讓他們各自帶一樣東西出門,并帶回一頭獵物。
上面一句話可以理解為父親對兒子的委托:獵物 辦法(工具 某工具)-->delegate 獵物(返回值) 帶回獵物(委托名)(工具(參數類型) x)-->delegate int GetValue(int i)
三個人執行委托的方法各不相同
兔子 打獵(工具 弓)-public static int GetValue1(int i){ return i; }
野雞 買(工具 錢)-public static int GetValue2(int i){ return i*2; }
狼 誘捕(工具 陷阱)-public static int GetValue3(int i){ return i*i; }
如何調用委托
用new關鍵字(將方法名作為參數)生成一個委托對象,建立委托與方法的關聯。
GetValue obj = new GetVlaue(Class.GetValue1);
obj(3); --> result: 3
GetValue obj = new GetVlaue(Class.GetValue2);
obj(3); --> result: 6
GetValue obj = new GetVlaue(Class.GetValue3)
obj(3); --> result: 9
通過委托調用不同的方法,將需要執行的方法作為委托的參數
我們還可以實現多路廣播委托,什么是多路廣播委托,看例子:
GetValue obj = new GetVlaue(Class.GetValue1);
obj += new GetVlaue(Class.GetValue2);
obj += new GetVlaue(Class.GetValue3);
obj(3);
多路廣播委托即:一處調用委托,所有關聯方法都會被調用。
委托的好處
1.相當于用方法作為另一方法參數(類似于C的函數指針)
2.在兩個不能直接調用的方法中作為橋梁,如:在多線程中的跨線程的方法調用就得用委托
3.當不知道方法具體實現什么時使用委托,如:事件中使用委托
?
附:.net framework中對委托進行了封裝,直接使用Func<>來代替delegate,Func<>最多有四個參數的重載。?
轉載于:https://www.cnblogs.com/zengen/archive/2011/02/06/1949518.html
總結
以上是生活随笔為你收集整理的理解委托(delegate)及为什么要使用委托的全部內容,希望文章能夠幫你解決所遇到的問題。