【委託】 委託是乙個特殊的類,用delegate修飾符;使函式可以作為引數被傳遞,作用上相當於c++中的函式指標。
委託是方法的抽象,它儲存的就是一系列具有相同簽名和返回回型別的方法的位址。呼叫委託的時候,委託包含的所有方法將被執行
public delegate void mydelegate(int para1, string para2);
簡單委託示例:
public delegate void dosth(string str); // step01: 首先用delegate定義乙個委託
class program
//step03: 對應委託的方法
static void printstr(string str)
}
○ 在clr執行時,委託dosth實際上就乙個類,該類有乙個引數型別為方法的建構函式,並且提供了乙個invoke例項方法,用來觸發委託的執行。
○ 委託dosth定義了方法的引數和返回型別
○ 通過委託dosth的建構函式,可以把符合定義的方法賦值給委託
○ 呼叫委託的例項方法invoke執行了方法
**********===匿名方法 ******************************====
//宣告委託時,直接把方法**寫入例項**中,省去方法名
public delegate int calculatoradd(int x, int y); //定義乙個委託
static void main(string args)
; //把乙個方法賦值給委託
int result = cadd(5, 6); //應用
console.writeline(result);
console.readline();
}
*************** lambda表示式 **********
繼續簡化delegate(int x, int y) ; 於是lambda出現了
public delegate int calculatoradd(int x, int y); //定義乙個委託
static void main(string args)
; //簡單的把delegate去掉,在()與{}之間加上 "=>"
int result1 = cadd(5, 6); //應用
//方法二:
calculatoradd cadd2 = (x, y) => ; //又把引數型別都乾掉了
int result2 = cadd2(5, 6);
//方法三:
calculatoradd cadd3 = (x, y) => x + y; //把{},以及return關鍵字都去掉了
int result3=cadd3(5,6);
console.writeline(result1);
console.writeline(result2);
console.writeline(result3);
console.readline();
}
***************泛型委託 **********
//繼續簡化委託的宣告與使用
funccadd4 = (x, y) => x + y; //
至此乙個委託的應用就可用 funccadd3 = (x, y) => x + y; 這樣一句話來完成了,其中的func就是所謂的泛型委託。
func至少0個輸入引數,至多16個輸入引數,根據返回值泛型返回。必須有返回值,不可void。
func 表示沒有輸入參參,返回值為int型別的委託。
func表示傳入引數為object, string ,返回值為int型別的委託。
func表示傳入引數為object, string, 返回值為int型別的委託。
func表示傳入引數為t1,t2,t3(泛型),返回值為int型別的委託。
c# 有三種常用的泛型委託,宣告形式如下
action
funpredicate
eventhandler 泛型委託
action委託
func委託
predicate委託
===表示式樹
=表示式樹是存放lambda表示式的一種資料結構,呼叫compile()執行指定lambda表示式
//表示式樹
expression> exp = (x, y) => x + y;
funcfun = exp.compile();
int result6 = fun(6, 7);
C 「委託」學習筆記
using system using system.collections.generic using system.linq using system.text namespace delegatetest console.writeline sh3 jiang 組合委託,此時委託就能夠依次執行多...
C 學習筆記 委託
什麼是委託?委託 delegate 是一種可以把引用儲存為函式的型別。委託的宣告非常類似於函式,但不帶函式體 且要使用 delegate關鍵字。委託的宣告指定了乙個型別和引數列表。在定義了乙個委託後就可以宣告該委託型別的變數。接著把這個變數初始化為與委託有相同返回型別和引數列表的函式引用。之後,就可...
C 委託學習筆記
namespace delegate private static void chinesegreeting string name 注意此方法,它接受乙個greetingdelegate型別的方法作為引數 private static void greetpeople string name,gr...