博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于一个简单面试题(。net)
阅读量:4933 次
发布时间:2019-06-11

本文共 1334 字,大约阅读时间需要 4 分钟。

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

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

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

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

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

转载于:https://www.cnblogs.com/jixinyu12345/p/4872488.html

你可能感兴趣的文章
javascript Arguments对象——函数的实际参数
查看>>
关于websocket中的心跳..
查看>>
线段树基础
查看>>
react native初步常见问题
查看>>
Bzoj 3631: [JLOI2014]松鼠的新家(树链剖分+线段树)
查看>>
CSS给文字描边实现发光文字
查看>>
上周热点回顾(2.13-2.19)
查看>>
CMDB学习之四 ——DEBUG模式
查看>>
简洁好用的pdf转换器
查看>>
【BZOJ4444】国旗计划 - 决策单调性
查看>>
Android 路径大全
查看>>
Gradel 多渠道打包 代码混淆
查看>>
ASPxGridView中Command列自定义按钮点击事件概要
查看>>
Maven安装与配置
查看>>
自定义图片,实现透明度动态变化
查看>>
mysql DDL&DML 语言
查看>>
LightOJ 1030 Discovering Gold 数学期望计算
查看>>
HDU 1520 Anniversary party
查看>>
IOS UIAlertView(警告框)方法总结
查看>>
Intellij IDEA资源推荐
查看>>