首页 > 学院 > 开发设计 > 正文

委托的三种实现方式

2019-11-17 03:21:33
字体:
来源:转载
供稿:网友

委托的三种实现方式

一. 委托的定义委托是封装方法的类型,委托的类型由委托的名称定义。既然它是是一种类型,那么它就可以像int、string一样去使用,好像也没有我们想象的那么神秘。在Entity Framework 3.5之前,在使用委托时需要先显示的声明委托,格式如下:
public delegate void DelegateName(string message);
View Code
在Entity Framework 3.5之后,新增了两种实现方式,格式如下:
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

二. 委托的具体实现

 首先,显示声明委托的实现方式:

 1. 声明委托 

        //显式定义一个没有返回值,有两个参数的方法的委托        public delegate void CommonDelegateForAction(string string1, string string2);
View Code

 2. 实例化委托的实例,并将方法的引用分配给委托实例

//实例化一个CommonDelegate的实例,并将对UpperString 方法的引用分配给委托实例            CommonDelegateForAction commDelegate = Concat;
View Code

 3.引用委托的实例,调用引用委托的方法

//引用CommonDelegateForAction的实例,调用UpperString方法            commDelegate(source1, source2);
View Code

 4. 完整的代码实现

public class CommonDelegateSample    {        //显式定义一个没有返回值,有两个参数的方法的委托        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的实例,调用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>委托实现方式

  Action<...>委托最多可以有16个参数,并且Action<...>委托使用前不需要提前声明。

 1.实例化委托的实例,并将方法的引用分配给委托实例

            //定义一个委托变量,并赋值为Concat            Action<string, string> actionDelegate = Concat;
View Code

 2.引用委托的实例,调用方法

            //引用委托的实例,调用方法            actionDelegate(str1, str2);
View Code

 3. 完整的代码实现

        public void Sample()        {            //定义一个委托变量,并赋值为Concat            Action<string, string> actionDelegate = Concat;            string str1 = "I deeply love my country,";            string str2 = "But she didn't love me.";            //引用委托的实例,调用方法            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

 最后,Func<T, TResult>委托的实现方式  Func<...>委托最多可以有16个输入参数,一个返回值,并且Func<...>委托使用前不需要提前声明。

 1.实例化委托的实例,并将方法的引用分配给委托实例

//定义一个委托变量,并赋值为UpperString            Func<string, string> convert = UpperString;
View Code

  2. 引用委托的实例,调用方法

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表