c# delegate action func predicate event 匿名函數 lambda
阿新 • • 發佈:2018-04-19
編寫 tel keyword AC 保存 word HA 沒有 上下文
1、delegate
是C#中的一種類型,它實際上是一個能夠持有對某個方法的引用的類。
與其它的類不同,delegate類能夠擁有一個簽名 (signature),並且它只能持有與它的簽名相匹配的方法的引用。
它所實現的功能與C/C++中的函數指針十分相似。它允許你傳遞一個類A的方法m 給另一個類B的對象,使得類B的對象能夠調用這個方法m。但與函數指針相比,delegate有許多函數指針不具備的優點:
首先,函數指針只能指向靜態函 數,而delegate既可以引用靜態函數,又可以引用非靜態成員函數。在引用非靜態成員函數時,delegate不但保存了對此函數入口指針的引用,而 且還保存了調用此函數的類實例的引用。
其次,與函數指針相比,delegate是面向對象、類型安全、可靠的受控(managed)對象。也就是 說,runtime能夠保證delegate指向一個有效的方法,你無須擔心delegate會指向無效地址或者越界地址。
2、action
是沒有返回值的委托,Action 表示無參,無返回值的委托, Action<int,string> 表示有傳入參數int,string無返回值的委托。
3、func
指有返回值的泛型委托,Func<int> 表示無參,返回值為int的委托,Func<object,string,int> 表示傳入參數為object, string 返回值為int的委托。
4、predicate
是返回bool型的泛型委托。
5、event
用來修飾delegate,不加event的委托就是一個普通的委托,可以直接通過委托調用,加了event的委托是一個事件,只能通過類的成員函數調用。
6、匿名方法
不需要使用特定的方法,簡化代碼,
- host.Opened += delegate(object sender, EventArgs e)
- {
- Console.WriteLine("Service Opened.");
- };
不帶參數和返回值的匿名方法,可以被具有任何形式簽名的委托所指代,如果有一個重載的方法,參數為兩種類型的委托,調用這個方法時如果使用不帶參數和返回值的匿名方法會編譯錯誤
- static void Output(IntDelegate id)
- {
- }
- static void Output(StringDelegate sd)
- {
- }
- static void Main(string[] args)
- {
- Output(delegate { });
- }
7、lambda表達式
也是一種匿名方法,(參數列表)=>表達式或語句塊,在編寫Lambda表達式時,可以忽略參數的類型,因為編譯器能夠根據上下文直接推斷參數的類型,
c# delegate action func predicate event 匿名函數 lambda