博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#委托与事件习题
阅读量:4589 次
发布时间:2019-06-09

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

【案例】有个高档的热水器,包含一个加热器,一个报警器和一个现实屏,我们给热水器它通上电,当水温超过95度的时候:

1、报警器会开始发出语音,告诉你水的温度;

2、液晶屏也会改变水温的显示,来提示水已经快烧开了。

请使用观察者模式Observer表述上述三个关系,并在main方法里进行测试。

代码如下:

namespace ConsoleApp1{    class Program    {        static void Main(string[] args)        {            Heater ht = new Heater();            Alarm alarm = new Alarm();            Display display = new Display();            ht.BoilEvert += alarm.MakeAlert;            ht.BoilEvert += display.ShowMsg;            ht.BoilWater();            Console.Read();        }    }    public class Heater    {        private int temperature;        public delegate void BoilHandler(int param);        public event BoilHandler BoilEvert;        public void BoilWater()        {            for (int i = 0; i <= 100; i++)            {                temperature = i;                if (temperature > 95)                {                    if (BoilEvert != null)                    {                        BoilEvert(temperature);                    }                }            }        }    }    public class Alarm    {        public void MakeAlert(int param)        {            Console.WriteLine("alarm:滴滴滴,水已经有{0}度了", param);        }    }    public class Display    {        public void ShowMsg(int param)        {            Console.WriteLine("display:水快开了,当前温度:{0}度", param);        }    }}

 

运行结果如下图所示:

【案例】有一家三口,妈妈负责做饭,爸爸和孩子负责吃。。。将这三个人,想象成三个类。

  妈妈有一个方法,叫做“做饭”。有一个事件,叫做“开饭”。做完饭后,调用开发事件,发布开饭消息。

  爸爸和孩子分别有一个方法,叫做“吃饭”。

  在main方法里,将爸爸和孩子的“吃饭”方法,注册到妈妈的“开饭”事件。也就是,订阅妈妈的开饭消息。让妈妈做完饭开饭时,发布吃饭消息时,告诉爸爸和孩子一声。

代码如下:

namespace ConsoleApp2{    class Program    {        static void Main(string[] args)        {            Mom mom = new Mom();            Dad dad = new Dad();            Son son = new Son();            mom.EatEvent += son.Eat;            mom.EatEvent += dad.Eat;            mom.Cook();            Console.ReadLine();        }        }    public class Mom    {        public delegate void EatHandler();        public event EatHandler EatEvent;        private void OnEat()        {            if (EatEvent != null)            {                EatEvent();            }        }        public void Cook()        {            Console.WriteLine("妈妈开始煮饭");            Console.WriteLine("妈妈开始炒菜");            OnEat();        }    }    public class Dad    {        public void Eat()        {            Console.WriteLine("爸爸:好的我这就来吃饭");        }    }    public class Son    {        public void Eat()        {            Console.WriteLine("儿子:等一会就去吃饭 ");        }    }}

 

运行结果如下图所示:

 

 

 

转载于:https://www.cnblogs.com/programme-maker/p/10901888.html

你可能感兴趣的文章
【Leetcode】【Easy】Compare Version Numbers
查看>>
014 链表中倒数第k个结点
查看>>
Python的pip安装Django
查看>>
第一冲刺阶段——站立会议第二天4月19日
查看>>
hdu-----(2807)The Shortest Path(矩阵+Floyd)
查看>>
简洁的MysqlHelper
查看>>
Android面试收集录2 Broadcast Receiver详解
查看>>
基于HTML5实现的中国象棋游戏
查看>>
Luogu P2024 [NOI2001]食物链 | 并查集
查看>>
openLayers3 中实现多个Overlay
查看>>
SQlServer2008 之 定时执行sql语句作业的制定
查看>>
函数式编程
查看>>
由浅入深之Jquery笔记(1)
查看>>
IE、FF、Chrome浏览器中的JS差异介绍
查看>>
IO模式和IO多路复用
查看>>
Redis常用命令
查看>>
vim 撤销 恢复 快捷键
查看>>
python导入import requests报错
查看>>
Hexo博客搭建
查看>>
内部类详解(很详细)
查看>>