关于一个简单面试题(。net)

]V]HPS3~ODVQE8OEI25DG6X

猫大叫一声,主人被惊醒,所有的小老鼠开始逃窜。

期初想到的是事件调用方法。

在猫叫的事件中调用一对方法就可以了。

但是,当事件很多的时候 难保大家写着写着就忘记了。

总不能有 10000个人的时候调用 10000个方法吧

所以就应该用委托来控制  

1、先定义一个委托

public delegate void AlertHandler();

2、我们再为这个委托定义个事件

public event AlertHandler AlertEvent;

 

3、推理思想 

事件执行的时候 有3件事情要做

 

就是

小猫要叫

人要醒

老鼠要跑所以在建立三个类的时候要 对三个类进行委托一个方法

小猫叫 就直接告诉自己就好了

人醒、老鼠跑、  这两个需要房间来告诉他们

因为都是在一个房间内部

 

4 建立一个控制台程序

代码如下

//定义猫大叫事件的代理
   public delegate void AlertHandler();
   //主人类
   class Human
   {
       //主人被惊醒的方法
       public void Wake()
       {
           Console.WriteLine("主人:死猫别叫");
       }
   }
   //老鼠类
   class Mouse
   {
       //老鼠被吓包的方法
       public void Run()
       {
           Console.WriteLine("老鼠:有危险,快跑!");
       }
   }
   //猫类
   class Cat
   {
       //猫大叫事件
       public event AlertHandler AlertEvent;
       public Cat()
       {
           //猫大叫时执行Cry方法
           AlertEvent += new AlertHandler(Alert);
       }
       //猫大叫事件执行的处理程序
       public  void Alert()
       {
           Console.WriteLine("猫:喵...喵...");
       }
       //猫大叫的方法
       public void Cry()
       {
           //触发猫大叫的事件
           AlertEvent();
       }
   }
   //房子类
   class House
   {
    
       //房子里有一只老鼠、一只猫和主人
       public Mouse mouse = new Mouse();
    
       public Human human = new Human();
       public Cat cat = new Cat();
       //由于在一个房子里,猫大叫的事件会引发老鼠“逃跑”和主人“惊醒”
       //所以在这里把老鼠“逃跑”和主人“惊醒”两个方法挂接到猫大叫的事件上。
       public House()
       {
           cat.AlertEvent += new AlertHandler(mouse.Run);
           cat.AlertEvent += new AlertHandler(human.Wake);
         
       }

   }

好好利用委托  、事件。

这样比的调用一对方法来的更好。至于好在哪里,程序员都懂。

 

调用方法如下

//有一间房子
           House h = new House();
           //猫大叫
           h.cat.Cry();
           Console.ReadKey();

posted @ 2015-10-12 18:44  临时工~  阅读(191)  评论(0编辑  收藏  举报