这次的代码更恐怖,一个字 长,二个字 够长,三个子 真是长,哈哈,不过你仔细研究一下还挺有意思的:)


用一个汽车游戏的例子来介绍一下事件(Event)using System;
用一个汽车游戏的例子来介绍一下事件(Event)
}

先瞧瞧我们做了什么?一个事件驱动的汽车游戏。当然是简化版用一个汽车游戏的例子来介绍一下事件(Event)

这个辆汽车能做什么?它目前只能快进,慢进,后退(为了简化的目的)。不过已经够用了。

后面的MoveRequestEventArgs类是用来给预定器(subscriber)(预定器是什么呢,看下去就知道了)传递特定的有关事件信息的。

然后是我们的Car类,三个字段distancespeedparamname,这三个字段在构造函数里进行初始化,然后有一个Subscribe方法用来增加我们需要预定的GameController,而其后的Unsubscribe则反之。

接下去往下看就是我们的事件操作方法(MoveRequestHandler)了,这个我想大家已经很熟悉了,在VS.NET里,我们为一个控件写事件操作方法,就是在这样的一个方法里写。这里我们根据我们得到的Request来做一些事(快进,慢进,后退),这个Request从哪里来呢,就是我们上面写的MoveRequestEventArgs得到的。

在接下来就是重写了ToString方法,返回汽车的名字。

然后就进入我们的GameController类。

我们注意到我们定义了一个MoveRequest的委托,根据它的参数跟返回值,我们可以猜想到它是用来封装Car类里的事件操作方法(MoveRequestHandler)的,然后我们用这个委托声明一个事件OnMoveRequest,跟普通委托不同,这里我们用到了关键字event

然后我们准备了一个最多能有10辆车的数组(难道我们要赛车:)),并准备了一些相关属性。

做完了准备工作,我们就写了一个好长好长的Run方法。

首先打印一个菜单供大家选择,然后等待大家的选择,根据选择,就在do循环里做一些工作了。

选项A:增加一辆车。对了,我们还没有车,肯定要先加一些车才能操作嘛。

选项C:我们要对车做一些事情了,那么么多车,让哪几辆做这些事呢?由你来订吧。

选项U:哦!天哪,我订错了,我不想让那几辆车做这些事了,怎么办呢?没关系,车还没开呢,取消掉刚才预定的车不就行了:)

选项L:列出现在拥有的车。

选项F:订好的车快进!怎么快进?担心什么,事件处理方法会为我们做的,你只要担心做哪些事就行了。

选项S:慢进!

选项R:后退!

选项T:不想玩了,Game Over

 

运行程序!啊?出错了!我们还没Main方法呢,急什么!

那么我们就在写一个Tester类吧,写上Main方法,叫来我们的GameController,开动!



注:1.这个程序还是有一些小bug,也没有考虑异常处理,但是用来说明事件的原理已经够了。
       2.参文代码参考《C# Primer Plus》
 

相关文章:

  • 2022-12-23
  • 2022-02-28
  • 2022-12-23
  • 2021-10-30
  • 2021-06-14
  • 2022-01-11
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-05
  • 2022-12-23
  • 2022-12-23
  • 2021-04-12
  • 2021-11-18
  • 2021-07-14
  • 2021-05-29
相关资源
相似解决方案