6-10复习

 
1、定义一个委托后,声明一个委托变量,因为是一个方法的变量,所以可以直接调这个变量,相当于就是调了一个方法。
2、在调用某个方法之前如果需要委托,则需要把委托变量指向上面那个方法里面的那段不确定代码所用的方法。
3、委托变量是引用类型,是一个字段,如果不赋值默认为null。调用时候会报错,所以一般在调用委托前,或者在触发事件前都要判断一下委托变量或者事件是否为null,如果不为null再调用,为null,不调用。
4、md(),这种调用方法,内部编译的时候调用了委托对象的Invoke()方法,和md.Invoke()方法一样。委托类型的变量是一个方法的变量,可以直接调这个变量,相当于调方法。
5、方法的里面的方法,用委托来实现。
6、委托实现事件的问题:1、可以在类的外部来触发。因为委托变量的访问修饰符是public的,所以在外部任何地方都可以触发。如果把访问修饰符改成private,那么的确不能在外部触发了,也不能再外部赋值了。2、 由于委托可以使用“=”来赋值,所以,就有可能将前面的所有的已经注册的事件处理程序都覆盖掉。
7、要用事件来实现,但是,用事件之前,必须定义委托,否则无法使用事件。使用事件和委托的区别就是一个event关键字。
8、因为事件只能通过+=或者-=赋值,所以避免了使用=赋值时的覆盖问题。事件不能再定义事件的类的外部触发,只能在那个累内部触发,所以也就避免了冒充事件触发的问题。
9、通过观察生成的代码,就可以发现,其实事件最终生成了:1,一个私有的委托变量(由于是私有变量,所以外界不能触发);2,两个public的方法,add和remove,分别用来说实现事件的+=和-=,所以只能用这两个方法,不能用+号赋值了。
10、委托,是一个数据类型,可以声明这个类型的变量;事件只是一个委托变量,事件本身就是一个委托变量和两个公有的方法。通过委托可以实现事件的所有功能,但是委托太灵活,可以再外部触发,可以用=赋值,所以有时候会造成写混乱,所以用事件,事件就相当于是对事件做了一些限制。
11、委托和事件的区别:
委托和事件没有可比性,因为委托是类型,事件是对象(可以理解为对事件的封装),事件的内部是用委托实现的。对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他注册者,外界不可以主动触发事件,如果用Delegate就没有办法进行上面的控制,因此诞生了事件这种语法。add,remove。事件是用来阉割委托实例的。事件只能add、remove自己,不能赋值。事件只能+=,-=,不能=,不能外部触发事件。
12、 委托的作用:占位,在不知道将来要执行的具体代码时候,可以先用一个委托变量来代替方法调用(委托的返回值,参数列表要确定),在实际调用前,需要为委托赋值,否则为null;
事件的作用:事件的作用和委托变量一样,只是在功能上比委托变量有更多的限制(比如,1,只能通过+=或-=来绑定方法(事件处理程序)2,只能在类的内部调用(触发)事件)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值