C# 委托的作用

首先,委托的关键字是Delegate ,委托是和类同级别的对象,委托应该声明成Public。下面我们先来看下这段代码:



        public delegate int GreetingDelegate(int a ,int b);//定义委托
        static void Main(string[] args)
        {

            Console.WriteLine(pro(3,4,add));

        }
        public static int pro(int x, int y, GreetingDelegate Gd )
        {
            return Gd(x,y);
        }
        public static int add(int x,int y) {
            return x + y;
        }

上面代码首先,声明一个委托变量,然后再把委托变量作为Pro里面参数 最后返回委托的方法

我们可以得出结论 :

1.委托可以把方法当作参数一样传递

2.委托方法的参数定义能够确定方法可以代表的方法种类

委托出了上面的调用方式外还有一种调用方式:

  public delegate int GreetingDelegate(int a ,int b);//定义委托
        static void Main(string[] args)
        {
            GreetingDelegate d1;
            d1 =pro;
            d1 += add;
            Console.WriteLine( d1(3, 4));
        }
        public static int pro(int x, int y)
        {
            return x-y;
        }
        public static int add(int x,int y) {
            return x + y;

        }

这段代码也是先声明一个委托变量 然后把pro方法赋值给d1最后绑定add方法并调用

结论:

1.我们可以把方法赋值给委托变量,委托变量可以绑定方法(第一次d1=pro是赋值,第二次d1+=add才是绑定方法 而我们调用的d1(3,4)就相当于调用的add(3,4),如果第一次就用+=将出现为赋值对象)

2.委托对象+=方法 (绑定方法)

  委托对象-=方法(取消绑定方法)

3.同一委托对象可以绑定多个方法,并可以依次执行所有绑定方法

那有没有方便简单的写法呢?回答当然是有的!于是出现了Action,Action<T>,Func<T>这种委托对象

我们先来看看Action和Action<T>这两个委托对象

static void Main(string[] args)
        {
            Action<int, int> T = new Action<int, int>(pro);
            Action T1 = new Action(add);
            T(3, 4);
            T1();
        }
        public static void pro(int x, int y)
        {
            Console.WriteLine(x+y);
        }
        public static void add() {

            Console.WriteLine("Hello");

/*也可以使用下面这种简写方式

            Action<int, int> T = pro;
            Action T1 = add;
            T(3, 4);

            T1();

*/

        }

结论:

1.Action 可以无参,也可以有参数,但是返回值必须是Void

2.Action至少0个参数,最多16个参数

最后让我们来看下Func

 static void Main(string[] args)
        {
            Func<int, int,int> T = new Func<int, int,int>(pro);
          Console.WriteLine(  T(3, 4));
        }
        public static int pro(int x, int y)
        {
            return x + y;

        }

/*简写方式如下

 static void Main(string[] args)
        {
            Func<int,int,int> T = pro;     
            T(3, 4);    
        }
        public static int  pro(int x, int y)
        {
            return x+y;
        }

*/

结论:

1.Func是必须有返回值的泛型委托

2.Func至少0个参数,最多16个参数

3.Func最后一个参数代表的是返回值类型,前面的是输入参数类型(如Func<T,T1,T2,T3>输入T1,T2,T3然后输出T类型

通过上面这些,我对委托有了一定的了解,但是在实际开发中还是要深入理解并运用起来,这是我的第一篇博客,以后还多发很多的博客,希望大家多多指导,给出建议和不足


  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值