如何理解c#委托和事件

有很多同学在学习C#的委托和事件时,都一头雾水,有的不理解委托和事件到底是什么东西,有的理解了概念,但不知道在什么场景中应该应用委托和事件,今天我们就一起总结下委托和事件的知识点:

【委托】

我们先从字面上理解委托,就是将事情托付给别人做,而非自己亲自做,自己只负责通知。

宏观上来看,委托就是一种通知机制,通知者需要做某事时,发起通知(Invoke),委托列表的订阅者得到通知,委托列表中的方法被顺序执行。

委托还可以理解成一种容器,容器里放的是函数方法,如:

               delegate void fun(int a,int b);

上句定义了一个委托fun,它有两个输入参数:a,b;返回参数为 void。

可以使用+=,=,-=往委托容器里添加或移除方法。

使用fun.invoke(a,b)或fun(a,b)触发委托,会将容器里的所有方法调用一遍。

有的同学可能觉得委托没什么用,不就是传个方法名,然后委托Invoke后再顺序执行方法吗,我按顺序一个个执行方法不也一样吗?其实,在C#中,因为取消了指针,很多事情,只能靠委托来完成,比如,在A类中实例化了B类,那A类中可以B类的数据,但B类却拿不到A类的数据,这时就需要在B类中声明一个委托,然后在A类中注册,这样B类委托被执行时,就可以拿到A类的数据了。

【事件】

委托和事件的关系,类似于 字段和属性的关系。事件内部封装了一个委托,并对其进行了一些访问限制。

                             

限制1:事件只能在定义类中Invoke;

例如:在B类定义委托,因为需在其他类中注册,通常将委托定义成public的,那么在其他类中,就可以调用委托的Invoke,这样就"冒充通知”,因为B才是真正的通知者。这在某些严格场景下是被允许的,那么此时使用事件就可以解决这个问题。

限制2:事件只能用+=,-=注册或移除方法列表;

委托可以使用=来注册方法,这样之前注册的方法将被覆盖,可能会导致问题。事件则杜绝了这种错误。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值