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("儿子:等一会就去吃饭 ");
        }
    }
}

 

运行结果如下图所示:

 

 

 

posted on 2019-05-21 19:37  熟烂的番茄  阅读(2190)  评论(0编辑  收藏  举报

导航