一. 委托的定義委托是封裝方法的類型,委托的類型由委托的名稱定義。既然它是是一種類型,那么它就可以像int、string一樣去使用,好像也沒有我們想象的那么神秘。在Entity Framework 3.5之前,在使用委托時需要先顯示的聲明委托,格式如下:

public delegate void DelegateName(string message);View Code
在Entity Framework 3.5之后,新增了兩種實現(xiàn)方式,格式如下:
1. 不帶返回值的委托定義:

public delegate void Action<in T1, in T2>( T1 arg1, T2 arg2)View Code
2. 代返回值的委托定義:

publicdelegate TResult Func<in T, out TResult>( T arg)View Code
二. 委托的具體實現(xiàn)
首先,顯示聲明委托的實現(xiàn)方式:
1. 聲明委托

//顯式定義一個沒有返回值,有兩個參數(shù)的方法的委托 public delegate void CommonDelegateForAction(string string1, string string2);View Code
2. 實例化委托的實例,并將方法的引用分配給委托實例

//實例化一個CommonDelegate的實例,并將對UpperString 方法的引用分配給委托實例 CommonDelegateForAction commDelegate = Concat;View Code
3.引用委托的實例,調(diào)用引用委托的方法

//引用CommonDelegateForAction的實例,調(diào)用UpperString方法 commDelegate(source1, source2);View Code
4. 完整的代碼實現(xiàn)

public class CommonDelegateSample { //顯式定義一個沒有返回值,有兩個參數(shù)的方法的委托 public delegate void CommonDelegateForAction(string string1, string string2); public void SampleForAction() { //實例化一個CommonDelegate的實例,并將對UpperString 方法的引用分配給委托實例 CommonDelegateForAction commDelegate = Concat; string source1 = "I deeply love my country,"; string source2 = "But she didn't love me."; //引用CommonDelegateForAction的實例,調(diào)用UpperString方法 commDelegate(source1, source2); } /// <summary> /// 連接兩個字符串 /// </summary> /// <param name="str1">字符串</param> /// <param name="str2">字符串</param> PRivate void Concat(string str1, string str2) { Console.WriteLine(str1+str2); } }View Code 其次,Action<T1, T2>委托實現(xiàn)方式
Action<...>委托最多可以有16個參數(shù),并且Action<...>委托使用前不需要提前聲明。
1.實例化委托的實例,并將方法的引用分配給委托實例

//定義一個委托變量,并賦值為Concat Action<string, string> actionDelegate = Concat;View Code
2.引用委托的實例,調(diào)用方法

//引用委托的實例,調(diào)用方法 actionDelegate(str1, str2);View Code
3. 完整的代碼實現(xiàn)

public void Sample() { //定義一個委托變量,并賦值為Concat Action<string, string> actionDelegate = Concat; string str1 = "I deeply love my country,"; string str2 = "But she didn't love me."; //引用委托的實例,調(diào)用方法 actionDelegate(str1, str2); } /// <summary> /// 輸出兩個字符串的連接 /// </summary> /// <param name="str1">字符串</param> /// <param name="str2">字符串</param> private void Concat(string str1,string str2) { Console.WriteLine(str1+str2); } }View Code 最后,F(xiàn)unc<T, TResult>委托的實現(xiàn)方式 Func<...>委托最多可以有16個輸入?yún)?shù),一個返回值,并且Func<...>委托使用前不需要提前聲明。
1.實例化委托的實例,并將方法的引用分配給委托實例

//定義一個委托變量,并賦值為UpperString Func<string, string> convert = UpperString;View Code
2. 引用委托的實例,調(diào)用方法
新聞熱點
疑難解答