谈一谈C#事件的本质

       委托和事件本身没有可比性,因为委托是类型,事件是对象,常在一起比较的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。两者的关系是:事件的内部是用委托实现的。

       因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。(个人觉得可以参考listbox的相关操作将其理解为listbox.items.add()和listbox.items.remove()操作。

事件是用来限制委托实例的。事件只能+=、-=,不能直接赋值,不能清空,不能外部触发事件。

假设我们定义了这一个委托
public delegate void MyDelegate();
再定义该委托相关的事件:
public event MyDelegate Event;

相当于在后台实现了如下操作:
private MyDelegate OnEvent;
public void Add(MyDelegate d)
{
   OnEvent+=d;
}
public void Remove(yDelegate d)
{
   OnEvent-=d;
}

这就好理解了为什么事件只能+=,-=,而不能有其它的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值