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

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

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

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

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

总不能有 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();

时间: 2024-10-14 17:02:21

关于一个简单面试题(。net)的相关文章

一个简单的js面试题

在js群里看到有人发问,于是抱着练手的心态写了答了几个面试题,题目虽然不是太难,却很考验人的编程思维.汗颜,看了别人的答案后才发现自己好像笨了很多. 废话不说了 ,上代码. 1 要求 给一个数组的最后一个元素加1 结果大于10则给前一个元素加1 并设置当前元素值=0:前一个元素亦是如此,例如 var a=new Array(3,9); a[1]+1; a=[3,9]; 此题看似很简单,只要最后一个元素等于10 就给钱一个元素加1,设置当前元素为0就是了,但还有一种特殊一点的情况,就是当数组的所有

一个简单的java僵局演示示例

在实际编程,为了避免死锁情况,但是,让你写一个有用的程序死锁似几乎不要太简单(种面试题),下面是一个简单的死锁样例. 线程的同步化可能会造成死锁,死锁发生在两个线程相互持有对方正在等待的东西(实际是两个线程共享的东西).仅仅要有两个线程和两个对象就可能产生死锁. package sxh.java.lock; /** * 一个简单的死锁类 * 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒 * 而td1在睡眠的时候还有一个flag==0的对象(td2)线程启动,先

【代码示例】 一个简单的Java死锁

在实际编程中,要尽量避免死锁情况的出现,但是有些面试中故意让你写一个死锁的程序,这似乎也不太简单(有些公司会出这样的面试题),下面讲解一个简单的死锁例子. 代码说明: 第一步: 当DeadLock的线程对象td1的属性flag为1时,第一个线程先锁定资源O1,睡眠500毫秒,然后尝试锁定资源O2(假如没有被锁定的话): 第二步:而第一个线程在睡眠的时候,第二个线程对象td2启动了,其属性flag为0,它首先锁定资源O2,然后睡眠500毫秒,尝试锁定资源O1,但是此时第一个线程已锁定资源O1,它只

一个简单的四则运算

这是一道笔试题,用c或c++编程实现+,-,*,/四种运算符的四则运算,运算式存放在一个字符数组中char str[].如给定字符数组 char str[] = "3+2*5", 那么输出结果为13. /************************************************************************* > Created Time: 2014年06月18日 **************************************

一个简单的java死锁示例

在实际编程中,要尽量避免出现死锁的情况,但是让你故意写一个死锁的程序时似乎也不太简单(有公司会出这样的面试题),以下是一个简单的死锁例子. 线程的同步化可能会造成死锁,死锁发生在两个线程相互持有对方正在等待的东西(实际是两个线程共享的东西).只要有两个线程和两个对象就可能产生死锁. package sxh.java.lock; /** * 一个简单的死锁类 * 当DeadLock类的对象flag==1时(td1),先锁定o1,睡眠500毫秒 * 而td1在睡眠的时候另一个flag==0的对象(t

【VBA研究】VBA做了个简单的试题生成工具

作者:iamlasong 单位对新上岗的员工进行培训,培训结束后,需要进行考试,需要一个简单的考试系统,让新员工既可以自己练习,也可以进行测试,为此,我们做了一个题库,员工可以自己生成一套考题,测试自己的掌握程度,也可以集中起来进行考试,测试培训效果. 系统数据库很简单,主要有两个表,一个是题库,一个是成绩. create table EMSAPP_TEST_QUESTION ( type                  CHAR(1), id                    NUMBE

一个简单的主机管理模拟程序

最近写的一个小练习,主要是把前面学的东西整合一下.写了一个简单的主机管理界面,主要是练习以下知识点: Session和Cookie进行登录验证(装饰器) 数据库的基本操作 (单表,1对多,多对多) Form的简单使用实现验证 Bootstrap模板写个简单界面 自定义分页 信号,中间件,CSRF,模板语言,JavaScript,AJAX等等 界面比较low,毕竟不是专业的. 附件里面是Django的源代码,3个文件放在一起winrar解压就可以打开

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program

完成一个简单的时间片轮转多道程序内核代码

王康 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 分别是1 存储程序计算机工作模型,cpu执行程序的基础流程: 2 函数调用堆栈:各种寄存器和存储主要是为了指令的传取值,通过eip,esp,eax,ebp和程序内存的分区,搭配push pop call return leave等一系列指令完成函数调用操作. 3 中断:多道批程序! 在复习一下上一讲的几个重要指令