国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

委托的三種實現(xiàn)方式

2019-11-17 03:21:33
字體:
供稿:網(wǎng)友

委托的三種實現(xiàn)方式

一. 委托的定義委托是封裝方法的類型,委托的類型由委托的名稱定義。既然它是是一種類型,那么它就可以像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)用方法

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 镇江市| 叙永县| 蓬安县| 巴青县| 闵行区| 融水| 嘉禾县| 朝阳市| 瑞昌市| 巴塘县| 广西| 汤阴县| 许昌市| 平和县| 漯河市| 陇川县| 宜都市| 成安县| 江永县| 临潭县| 博兴县| 棋牌| 湘阴县| 双辽市| 连城县| 陆良县| 额敏县| 唐海县| 大兴区| 高阳县| 福泉市| 扶沟县| 蒙阴县| 东乌珠穆沁旗| 泽州县| 左贡县| 神池县| 嘉禾县| 老河口市| 秦安县| 山阳县|