c事件和委托的区别_C#学习之利用委托来实现观察者模式

本文通过猫捉老鼠的游戏场景,详细介绍了观察者模式的实现过程。首先定义了猫和老鼠两个类,并利用委托的方式实现了猫活动时老鼠逃跑的行为。进一步通过事件优化了观察者模式,使代码更易于维护。

66584480ad33de857c011a522998a996.png

首先我们定义一个场景,地球上由于食物链的存在,生物便有了猎食和被猎食的命运。那么我我这里用猫抓老鼠的场景,用简单的程序来实现一个简单的观察者模式。

猫咪作为一个被观察者,而老鼠们则作为观察者,当被观察者,即猫咪开始活动的时候,老鼠们就要开始逃命了。

这里先创建一个猫的类,给定猫特有的属性和一个活动的方法,下面的代码都用控制台的方式来呈现猫和老鼠的活动状态。

猫的类:

namespace 

类中声明了一个Action的委托。

老鼠的类:

最后是Main方法开始调用

namespace 

输出的结果:

80b27e13b0649da3dd3096c083274ca9.png

如果我们这里不用到委托,单纯在Cat类里调用cat的Move方法同时,也要在方法里创建老鼠的对象并调用方法,假如每增加多一个老鼠,那么就要在cat的Move方法的基础上再进行修改,非常的不人性化。这里我们用到委托后,开发好Cat的方法后就不再需要动它了。方便维护代码。做到解耦的作用,减少程序的复杂性,也提高了可读性。

接下来可以用事件来优化一下这个观察者的设计模式。

事件:

概念:事件基于委托,为委托提供了一个发布/订阅机制,可以说事件是一种具有特殊签名的委托。

事件(event)是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托。

事件的声明:

  • public event 委托类型 事件名
  • 事件使用event关键字来声明,它的返回类是一个委托类型。
  • 通常事件命名,以名字+Event作为他的名称,在编码中尽量使用规范命名,增加代码的可读性。

注意点:事件不能在类的外部触发,只能在类的内部触发。

事件与委托的联系和区别

  • 事件是一种特殊的委托,或者说是受限制的委托,是委托的一种特殊应用,只能施加+=,-=操作符。二者本质上是一个东西。
  • event ActionHandler Tick;编译成创建一个私有的委托示例,和施加在其上的add,remove方法,就是上面说的+=,-=..
  • event 只允许用add,remove方法来操作,这导致了它不允许在类的外部被直接触发,只能在类的内部合适的实机触发。

使用中,委托常用来表达回调,事件表达外发的接口。

下面我们看看用事件来实现观察者模式。

猫的类:

namespace 

老鼠类:

namespace 

Main方法:

namespace 

输出结果:

076d30f7f81c64b813ddb1c0b785314a.png

结果没问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值