zoukankan      html  css  js  c++  java
  • 失业日志:2009年10月15日 猫 老鼠 人(一)

    猫 老鼠 人 理解委托和事件以及联动。
    今天准备了一下面试题,因为委托和事件我一直没有涉足,对这个一知半解,不太会,网上有一道面试题,大概意思就是,猫一叫,老鼠就跑,人就醒。要求猫叫后触发老鼠跑和人醒。
    没搞清委托之前,这样写最好。在猫的CryOut中增加老鼠跑或者人醒。
    Code

    但是这种方法不符合出题者的初衷,想想,如果一次猫叫有一只老鼠跑,另一次猫叫有两只老鼠跑,这样如何解决呢?难道修改CryOut代码?显然这样是错误的。

    这道题其实是要说明delegate委托和event事件的用法,以及接口和或者抽象类的使用,这里先不说接口和抽象类。
    委托是c#中一种类型。
    一个委托变量中,存放了多个符合委托所要求的函数的指针(地址),当委托执行时,依次执行这些函数。
    而事件,就是委托的一种特殊的变量。
    以上这两个问题,我想了好久才搞明白。

    由此,猫和老鼠以及人的问题就可以理解为,给猫定义一个委托变量,然后把老鼠和人的在听见猫叫后的反应函数放到这个委托变量中,当猫叫时,执行这个委托,自然就执行了这个委托中所包含的函数。
    首先定义一个委托
    delegate void MyEventHandler();
    然后分别在老鼠和人中定义相关符合委托调用的函数。
    class Mouse{
                public void MouseRun()
                {
                    Console.WriteLine("Let's go,Friends");
                }
    }
    class People{
                public void PeoPleRun()
                {
                    Console.WriteLine("I'm Waking");
                }
    }
    因为是猫叫触发,因此这个委托变量应该定义在猫的类中,并且在猫叫的时候执行委托中的函数。
    class Cat{
          public MyEventHandler myHandler;
          public void Cry(){
                 Console.WriteLine("I'm crying");
                 if(myHandler!=null){ myhandler(); }
          }
    }
    好的,差不多了,剩下来就是如何把老鼠和人的函数增加到这个myHandler变量中去。这个可以用老鼠和人的构造函数,将Cat的实例传入构造函数,然后在委托中增加函数。贴下全部代码。
    Code

    OK,可以说的是,event关键字可以不要,至于要不要event,还弄的不是很清楚。以后再研究下。
    下次再将老鼠和人的方法抽象一个接口。
    以上的描述或有不太准确的地方,因为都是个人理解,可能会和真词不同,理解。
  • 相关阅读:
    onchange 事件
    JavaScript 声明全局变量和局部变量
    Window 对象 HTML框架标签(Frame)
    HTML DOM Document 对象
    JavaScript 对象
    HTML <frame> 标签的 src 属性
    HTML DOM open() 方法
    数据类型
    python
    angular 在formGroup中失效报错 ngModel cannot be used to register form controls with a parent formGroup directive
  • 原文地址:https://www.cnblogs.com/poplau/p/1584229.html
Copyright © 2011-2022 走看看