zoukankan      html  css  js  c++  java
  • 委托与事件的关系

    说道"委托"这个词我们肯定都不会陌生吧,生活中"委托"就是请别人帮我们做事。

    程序中也是如此,委托机制是.Net中特有的,我们可以将方法作为参数传给委托,让委托帮我调用执行方法。

    先来看看委托是如何定义的:

    [访问修饰符] delegate 返回值 委托名([参数]);

    委托类似于C/C++中的函数指针,但是它们又有一些区别,并不是完全等价的。

    说到指针,很多人肯定又晕,指针其实就是地址,而函数指针就是函数的地址或者说函数的入口,这样说相信我们会好理解一点。

    委托是一种类型,可以存储多个方法的列表,而函数指针只能存储一个函数的指针,除非使用指针数组才可以存储多个函数的指针。

    好了,言归正传。下面我们来看看事件是什么玩意?

    我们定义一个事件是使用event关键字,其实事件就是委托类型变量,这是不是出乎很多人的意料?

    event关键字主要是为了限制我们在外部调用委托,只允许在类内部调用委托,并且只能通过+=和-=来追加移除方法。

    下面我们定义一个事件:

    public event void MyDelegate dele;

    然后我们通过Reflecator反编译可以看到:

    事件的本质其实就是一个私有委托和两个方法(add和remove方法)

    有点类似字段和属性,事件就是在类内部对委托进行了封装。

    所以说事件其实一个阉割后的委托。

  • 相关阅读:
    Git使用教程
    安卓Activity全屏显示以及不显示title
    Android自定义权限
    java基础类型数据与String类包装类之间的转换与理解
    sQL存储过程的优缺点
    安卓5.0新特性
    Android中图片压缩(质量压缩和尺寸压缩)
    java基本数据类型所占字节数
    Android性能优化之一:ViewStub
    安卓内存优化和视图优化
  • 原文地址:https://www.cnblogs.com/rampb/p/3547362.html
Copyright © 2011-2022 走看看