demo for Event code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EventDemo
{
    delegate void TemperatureChangedEventHandle(object sender, BoiledWaterEventArgs args);
    class Program
    {
        static void Main(string[] args)
        {
            Heater ht = new Heater();
            Monitor mt = new Monitor();
            ht.TemperatureChanged += new TemperatureChangedEventHandle(Monitor.MonitorTemperature);
            ht.PowerOn();
        }
    }
    class Heater
    {
        public Heater()
        {
            Type = "强力热得快";
            Area = "Made in China, Made by Trump";
        }
        private int _temperature;
        public event TemperatureChangedEventHandle TemperatureChanged;
        public string Type
        {
            get;
            private set;
        }
        public string Area
        {
            get;
            private set;
        }
        public bool IsOnPower
        {
            get;
            private set;
        }
        public void PowerOff()
        {
            IsOnPower = false;
            string s = new string('*'50);
            Console.WriteLine("我的电源被拔掉了,现在温度开始下降,Type:{0},Area:{1}", Type, Area);
            Console.WriteLine(s);
            System.Threading.Thread.Sleep(500);
            while (_temperature > 0)
            {
                _temperature--;
                System.Threading.Thread.Sleep(500);
                TemperatureChanged(thisnew BoiledWaterEventArgs { Temperature = _temperature,Type=this.Type,Area = this.Area});
            }
        }
        public void PowerOn()
        {
            IsOnPower = true;
            string s = new string('*'50);
            Console.WriteLine("我开始烧水了我的信息,Type:{0},Area:{1}", Type, Area);
            System.Threading.Thread.Sleep(500);
            Console.WriteLine(s);
            BoilWater();
        }
        private void BoilWater()
        {
            while (IsOnPower && _temperature < 100)
            {
                _temperature++;
                System.Threading.Thread.Sleep(200);
                TemperatureChanged(thisnew BoiledWaterEventArgs { Temperature = _temperature, Type = this.Type, Area = this.Area });
            }
        }
    }
    class Monitor
    {
        public static void MonitorTemperature(object sender, BoiledWaterEventArgs args)
        {
            Heater ht = sender as Heater;
            int temperature = args.Temperature;
            if (null == ht)
            {
                Console.WriteLine("这不是坑爹嘛,sender根本就不是热水器", temperature);
                return;
            }
            if (temperature < 30)
            {
                Console.WriteLine("水温也太低了.....浑身鸡皮疙瘩,温度:{0}", temperature);
                if (!ht.IsOnPower)
                {
                    ht.PowerOn();
                }
            }
            else if (temperature >= 30 && temperature < 50)
            {
                Console.WriteLine("水温刚好,很爽,温度:{0}", temperature);
            }
            else if (temperature >= 50 && temperature < 70)
            {
                Console.WriteLine("有点烫,尚可忍受,权当蒸桑拿了,温度:{0}", temperature);
            }
            else if (temperature >= 70)
            {
                Console.WriteLine("你想烫死哥啊,快关电源,温度:{0}", temperature);
                if (ht.IsOnPower)
                {
                    ht.PowerOff();
                }
            }
        }
    }
    class BoiledWaterEventArgs : EventArgs
    {
        public int Temperature
        {
            get;
            set;
        }
        public string Type
        {
            get;
            set;
        }
        public string Area
        {
            get;
            set;
        }
    }
}
原文地址:https://www.cnblogs.com/kakaliush/p/2283688.html