• 简单C#事件示例


      本人做程序也不久,这是第一篇博客,把自己平时学习到小点记录下来,与大家分享,一起成长..

      本文用事件模拟一个热水器烧水的过程,差不多是这样的:

    热水器开始对水加热,当水加热到95度以上的时候,热水器的报警器开始报警,并且在屏幕上显示当前的水温。

    不难从上面的这一小段话看到,要想模拟该程序,需要一个热水器对象Heater,报警器对象Alarm,显示器对象Display。

    下面边上代码边解释吧。

       

    /// <summary>
        /// 热水器类,用来烧水的
        /// </summary>
        class Heater
        {
            private int temperature;                    //水温
            public delegate void BoilEventHandler(object sender, BoilEventArgs e);
            public event BoilEventHandler boil;         //自定义事件

            public void OnBoil(BoilEventArgs e)         //水温达到一定温度后开始执行事件
            {
                if (boil != null)
                    boil(this, e);
            }

            public void BoilWater()                     //水从0度开始烧,当达到95度的时候开始报警
            {
                for (int i = 0; i <100; i++)
                {
                    temperature = i;
                    if (temperature >= 95)
                    {
                        BoilEventArgs e = new BoilEventArgs(temperature);
                        OnBoil(e);
                    }
                }
            }
        }

    /// <summary>
        /// 自定义事件参数,此类必须继承EventArgs类
        /// </summary>
        class BoilEventArgs:EventArgs
        {
            public readonly int temperature;            //水温

            public BoilEventArgs(int temperature)
            {
                this.temperature = temperature;
            }
        }

    /// <summary>
        /// 警报器类,当水温达到一定程度时,发出声响提示用户水已开
        /// </summary>
        class Alarm
        {
            public void MakeAlarm(object sender, BoilEventArgs e)
            {
                Console.WriteLine(string.Format("警报:嘟嘟,水温{0}度", e.temperature.ToString()));
            }
        }

    /// <summary>
        /// 显示器类,当水温达到一定程度时,在屏幕上显示当前温度给用户看
        /// </summary>
        class Display
        {
            public static void ShowMessage(object sender,BoilEventArgs e)
            {
                Console.WriteLine(string.Format("屏幕显示:当前温度{0}度",e.temperature.ToString()));
            }
        }

    class Program
        {
            static void Main(string[] args)
            {
                Heater heater = new Heater();
                Alarm alarm = new Alarm();
                heater.boil += alarm.MakeAlarm;
                heater.boil += Display.ShowMessage;
                heater.BoilWater();
                Console.ReadLine();
            }
        }

    输出结果:

  • 相关阅读:
    中断API之enable_irq
    XML和Schema命名空间详解
    “低头”时代,会不会就此终结?
    巨型冰山惊现格陵兰,好莱坞大片场景上演
    半世纪以来最佳英文小说:《英国病人》
    线程锁(互斥锁Mutex)
    Python GIL(Global Interpreter Lock)
    黑暗中的生物:利用奇技淫巧快活生存
    “人工智能”造假:只有人工,没有智能
    克罗地亚:输了世界杯,却赢了全世界
  • 原文地址:https://www.cnblogs.com/LittlePanda/p/Event.html
Copyright © 2020-2023  润新知