C++

  //观察者类,它有一个符合我们上面定义的"委托"的方法

  //也就是void ShowTime(object obj,TimeEventArgs args)

  //从这个方法的定义可以看到,我们只会关心返回类型和方法的参数,而方法名称则无所谓

  class MyClassEventHandler

  {

  public void ShowTime(object obj,TimeEventArgs args)

  {

  Console.WriteLine("现在时间:"+args.Hour+":" + args.Minute + ":" + args.Second);

  }

  }

  //时钟类

  class Clock

  {

  //我们在这个类中定义了一个"TimeChanged"事件,注意其前面有两个关键字"event"和"TimeEventHandler"

  //其中event表示这是一个事件,而不是方法或属性,TimeEventHandler则指出,谁要监听TimeChanged事件,它就必须有一个符合TimeEventHandler(委托)的方法

  public event TimeEventHandler TimeChanged;

  public Clock()

  {

  //注意,这里的null的含义是指TimeChanged事件当前还没有观察者关注它

  //如果某个观察者要关注TimeChanged事件,它必须要让这个事件知道,方法是使用操作符"+="来借助委托将其加载到事件上

  TimeChanged = null;

  }

  //时钟开始走动,我们的目标是每秒钟触发一次TimeChanged事件

  public void go()

  {

  DateTime initi = DateTime.Now;

  int h1 = initi.Hour;

  int m1 = initi.Minute;

  int s1 = initi.Second;

  while (true)

  {

  DateTime now = DateTime.Now;

  int h2 = now.Hour;

  int m2 = now.Minute;

  int s2 = now.Second;

  if (s2 != s1)

  {

  h1 = h2;

  m1 = m2;

  s1 = s2;

  //首先建立一个TimeEventArgs对象来保存相关参数,这里是时分秒

  TimeEventArgs args = new TimeEventArgs(h2, m2, s2);

  //注意这种写法,这一句是用来触发事件,事件不是类,所以不用使用"new"关键字,而且我们看到,这里TimeChanged的两个参数跟我们的委托(TimeEventHandler)是一致的

  //其中第一个参数是触发这个事件的对象,我们这里使用的是一个时钟实例(this)

  TimeChanged(this, args);

  }

  }

  }

  }

  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值