黑马程序员_委托

//定义一个委托

//1.使用delegate关键字。

//2.这个委托将来要存储的方法如果没有返回值,那么委托也要定义成void。如果没有参数那么将来传递的方法也不能有参数

    public delegate void MethodDelegate();

//委托是一个数据类型,用的时候需要传递一个变量。

//委托的作用就是:可以在某个代码内部,嵌入一段外部代码,相当于是注入

//一般在调用委托前或者是在触发事件前,要判断一下委托或者事件是否为null

            Test(M1);

            Console.ReadKey();

 

        static void Test(MethodDelegate canshu)

        {

            canshu();

        }

 

        static void M1()

        {

           Console.WriteLine("这个是M1方法!");

        }

 

通过遍历调用委托中的每个方法,实现获取每个方法的返回值;

通过调用GetInvocationList()方法,返回当前委托中的所有方法,返回值类型是Delegate数组。

所有定义的委托都是继承自抽象类MulticastDelegate,而MulticastDelegate继承自Delegate类(abstract

 

多播委托:内部是将绑定在当前委托对象上的每个方法,都转换为一个委托对象,并且存储在一个叫_invocationListobject数组中,然后调用委托的时候,就循环遍历_invocationList数组,并且调用其中的每一个委托。

多播委托中只能存储同一类委托,如果其中某个方法执行时发生了异常,则后续的方法不再执行。

 

使用委托时,如果不是+=而是使用=赋值,会将前面绑定的所有其他方法(委托)都覆盖掉。

 

委托的作用:占位,在不知道将来要执行的方法的具体代码时,可以先用一个委托变量来代替方法调用(委托的返回值,参数列表要确定)

事件最终生成了:一个私有的委托;两个public的方法AddRemove,分别用来实现事件的+=-=

有了委托类型后就可以定义事件了,因此使用事件和委托的区别是一个event关键字,委托是一个数据类型,事件相当于委托的一个变量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值