标题:关于事件:这里为什么是 Bioevent != null ??
取消只看楼主
lxsxd
Rank: 5Rank: 5
等 级:贵宾
威 望:14
帖 子:153
专家分:357
注 册:2014-4-15
结帖率:96.15%
 问题点数:0 回复次数:1 
关于事件:这里为什么是 Bioevent != null ??
(一)例题:假设我们有个高档的热水器,我们给它通上电,当水温超过95°的时候:1、扬声器会开始发出语音,告诉你水的温度;2、液晶屏也会改变水温的显示,来提示水已经快烧开了。

首先,定义一个类Heater,代表热水器。然后定义一个字段temp,表示水温。最后定义三个方法。HeatingWater()表示给水加热,VoiceAlarm()表示语音提示警报。ShowWater()显示水温。
代码如下:

namespace C_sharp学习
{
    class Heater
    {
        public delegate void Biodelegate(int pem);

        public event Biodelegate Bioevent;

        int temp;
        public void HeatingWater()
        {
            for (int i = 0; i < 100; i++)
            {
                temp = i;
                if (temp > 95)
                {
                    if (Bioevent != null)
                    {
                        Bioevent(temp);
                    }
                }
            }
        }
    }

    class Alarn
    {
        public void VoiceAlarn(int pem)
        {
            Console.WriteLine("警报:嘀嘀嘀,水已经{0}°了!",pem);
        }
    }

    class Display
    {
        public void ShowWater(int pem)
        {
            Console.WriteLine("显示:嘀嘀嘀,水快烧开了,当前温度是:{0}°。",pem);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Heater heater = new Heater();
            Alarn alarn = new Alarn();
            Display display = new Display();

            heater.Bioevent += alarn.VoiceAlarn;
            heater.Bioevent += display.ShowWater;

            //heater.Bioevent -= alarn.VoiceAlarn;
            //heater.Bioevent -= display.ShowWater;

            heater .HeatingWater ();
            Console.ReadLine ();
        }
    }
}

(二)理解
第一步:程序运行到 heater .HeatingWater ();,即调用了HeatingWater ()方法,于是HeatingWater ()开始执行。
        执行的结果是i(水温)增加,到达95°以上。
第二步:当水温i到达95°时,引发事件 Bioevent(temp);这个事件引发后,调用两个方法,即:VoiceAlarn()温度警报 和 ShowWater()显示温度。

这些理解没有问题,只是对这段代码理解不了,为什么是 if (Bioevent != null)?
              if (temp > 95)
                {
                    if (Bioevent != null)
                    {
                        Bioevent(temp);
                    }
即:事件Bioevent不为空的时候,引发事件。
当temp=96°时,进入 if (Bioevent != null),这里程序怎么判断Bioevent一定不为空然后引发事件呢?困惑!困惑!!
小虾不知如何理解???望高手大侠们不吝赐教!小虾在此先谢谢了!!
搜索更多相关主题的帖子: 热水器 public 液晶屏 扬声器 null 
2014-07-29 17:27
lxsxd
Rank: 5Rank: 5
等 级:贵宾
威 望:14
帖 子:153
专家分:357
注 册:2014-4-15
得分:0 
Bioevent是一个事件,声明事件的时候,默认Bioevent==null
也只有当Bioevent!=null的时候,Bioevent中才有可以执行的事件,此时Bioevent才能执行,Bioevent调用的事件来自:
 heater.Bioevent += alarn.VoiceAlarn;
 heater.Bioevent += display.ShowWater;


这是“步向巅峰”给我的解释,让我豁然开朗了。在此,特别感谢步向巅峰!!

艰难地走在C#自学的路上…………
2014-07-29 20:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434527-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.401474 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved