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("兒子:等一會就去吃飯 ");
        }
    }
}

 

運行結果如下圖所示:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM