zoukankan      html  css  js  c++  java
  • C#委托与事件习题

    【案例】有个高档的热水器,包含一个加热器,一个报警器和一个现实屏,我们给热水器它通上电,当水温超过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("儿子:等一会就去吃饭 ");
            }
        }
    }

    运行结果如下图所示:

     

  • 相关阅读:
    Go数据类型之复合数据类型--数组
    linux系统编程面试题
    各种距离 欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准欧氏距离、马氏距离、余弦距离、汉明距离、杰拉德距离、相关距离、信息熵
    欧氏距离和曼哈顿距离
    SpringCloud-Zuul源码分析和路由改造
    TiDB注意事项
    Littleproxy的使用
    HBase 架构与工作原理5
    HBase 架构与工作原理2
    HBase 架构与工作原理3
  • 原文地址:https://www.cnblogs.com/programme-maker/p/10901888.html
Copyright © 2011-2022 走看看