C# 委托与事件的区别及应用场景


一、什么是委托?

委托是寻址方法的.Net版本,在C++中,函数指针只是指向内存位置,不是类型安全的。你无法得知这个指针实际指向什么,参数类型、返回类型也无从得知。而.Net委托是一个类型安全的类,它定义了返回类型、参数类型。从IL中看它是继承至MulticastDelegate,所以委托可以说其实就是个类。

功能上而言:当要把方法作为传送给其他方法时,就需要使用委托

C#:
在这里插入图片描述
IL:上图代码在IL编译后的结果,可知其继承自父类 MulticastDelegate
在这里插入图片描述

二、委托使用步骤

1.声明委托

定义委托就是告诉编译器这种类型的委托表示那种类型的方法


       //声明一个委托
        public delegate void Voiddelegate( int x);// 声明一个委托,委托所包含的方法带有一个int参数,并且返回Void
        public delegate void Void_delegate();//委托所包含的方法无参数,并且返回Void
        public delegate int IntDelegate();// 委托所包含的方法无参数,并且返回int
        public delegate int Int_Delegate(int x);// 委托所包含的方法带有一个int参数,并且返回Void

定义委托等同于定义一个新类,所以可以在任何地方定义、加上任何修饰符public、private…

1.1实例化委托

实例化时必须传递一个和委托的参数及返回值相同的方法

 IntDelegate intDelegate = new IntDelegate(test);
  public static int test(){
   
            return 1;
        }

1.2委托调用

            intDelegate.Invoke();
            intDelegate();//两者等价,可以省略invoke
            //参数①:AsyncCallback是异步完成的回调方法。
             //参数②是用户自定义对象,该对象将传递到回调方法中
            intDelegate.BeginInvoke(null, null);//重新开一个新线程去执行方法

            intDelegate.EndInvoke(null);//检测异步调用的结果,通常放在回掉函数中

1.3委托使用场景

用于解耦、减少代码不稳定性、减少重复代码

 public class A{
   
        public delegate void Str_Delegate(string type);
      public void sayCat(string type){
   
            Console.WriteLine("cat:"+type);
      }
        public void say
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值