Java猫叫老鼠跑人惊醒_[C#]猫叫人醒老鼠跑 C#的委托及事件

讲解了一下委托跟事件的应用,说实话这个东西听起来还是一头雾水,虽然学会怎么用,但是还没搞明白需要在什么时候用到这个,后来我们经理给我举了个例子,让我做一个经典的委托和事件的例子,就是猫叫人醒老鼠跑。

首先很简单,需要定义猫,人跟老鼠三个类,分别命名为Cat,People,Mouse,在这里我还写了一个接口,里面写了一个void Action(),用以实现多态,People和Mouse两个类继承了这个接口并实现,然后定义一个委托public delegate void Scream(), 返回类型为void,然后在Cat类中定义一个事件public event Scream scream,用来接下里的事件绑定。接下来要写一个虚拟类,来作为一个观察者,而Cat类是作为一个被观察者,当Cat类中的方法被调用以后,触发绑定在事件里面的方法,这里我写了一个虚类来扮演观察者的角色,Cat类做为被观察者,当Cat类被调用呢,观察者告诉另外两个类Cat类已经被调用,然后这两个类各自实现相应的方法,也就是说观察者观察到猫叫了一声以后告诉人和老鼠,人就醒过来,而老鼠就开始跑,这就是同一件事情引发的不同角色的不同动作,而虚类的构造函数方法来绑定虚方法Action()。虚类的代码如下:

public abstract class Observer : IScream     {         protected Cat cat{get;set;}         public Observer(Cat cat)         {             this.cat = cat;             this.cat.scream += Action;         }         public abstract void Action();     }

人跟老鼠的类继承自这个虚类,通过重写虚方法Action来达到实现多态的效果,然后通过base来调用父类的构造函数,人跟老鼠类的代码如下:

class Person:Observer     {         public override void Action()         {             Console.WriteLine("主人醒来了");         }         public Person(Cat cat) : base(cat)         {         }     }

class Mouse : Observer     {         public override void Action()         {             Console.WriteLine("老鼠跑了");         }         public Mouse(Cat cat) : base(cat)         {         }     }

这样定义好了以后,最后只要调用Cat类的方法就能实现预期效果,整体代码如下:

public delegate void Scream();     public class Cat     {                 public event Scream scream;                  public void Action()         {             Console.WriteLine("猫叫了一声");             scream();         }             }     public abstract class Observer : IScream     {         protected Cat cat{get;set;}         public Observer(Cat cat)         {             this.cat = cat;             this.cat.scream += Action;         }         public abstract void Action();     }     class Mouse : Observer     {         public override void Action()         {             Console.WriteLine("老鼠跑了");         }         public Mouse(Cat cat) : base(cat)         {         }     }     class Person:Observer     {         public override void Action()         {             Console.WriteLine("主人醒来了");         }         public Person(Cat cat) : base(cat)         {         }     }        class Program     {                 static void Main(string[] args)         {             Cat cat = new Cat();             Person p = new Person(cat);             Mouse m = new Mouse(cat);             cat.Action();             Console.ReadLine();         }     }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值