C#事件与委托(水壶烧水事件)

假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候: 
1、扬声器会开始发出语音,告诉你水的温度 
2、液晶屏也会改变水温的显示,来提示水已经快烧开了。 
对上面的程序做个改进: 
假设热水器由三部分组成: 
热水器,仅仅负责烧水 
警报器,发出警报 
显示器,显示提示和水温 
代码:

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

namespace task3
{
    public delegate void MyAlarm(int temperature);           //创建委托报警
    public delegate void MyDispaly(int temperature);         //创建委托显示
    class Heater             //热水器类
    {
        private int temperature;    //温度
        public int Temperature
        {
            get { return temperature; }
            set
            {
                if ((temperature >= 0) && (temperature <= 100))
                    temperature = value;
                else
                    Console.WriteLine("温度有问题!显示出错!");
            }
        }
        public event MyAlarm DoMyAlarm;        //建立事件报警
        public event MyDispaly DoMyDisplay;     //建立事件显示
        public void BoilWater(int m)       //m 表示烧水时间,没分钟提高摄氏度
        {
            Console.WriteLine("感谢您使用热水器,现在温度为{0},\n本次烧水时间为{1}分钟。" +
                "(每分钟提高10摄氏度)", this.temperature, m);
            this.temperature = m * 10 + this.temperature;
            if (this.temperature >= 100)
                this.temperature = 100;
            if (this.temperature >= 95)
            {
                DoMyAlarm(this.temperature);
                DoMyDisplay(this.temperature);
                Console.WriteLine("");
            }
            else
                Console.WriteLine("目前还没烧开!\n");
        }
    }

    class Alarm            //报警器类
    {
        public void MakeAlert(int temperature)
        {
            Console.WriteLine("叮叮叮,叮叮叮。。。\n报警器提示水壶水温现在是{0}",temperature);
        }
    }
    class Display       //显示器类
    {
        public void ShowMsg(int temperature)
        {
            Console.WriteLine("显示器提示现在的水温为{0}", temperature);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Heater he1 = new Heater();     //第一次烧水(水伟烧开,不会触发事件)
            he1.Temperature = 10;
            Alarm al1 = new Alarm();
            Display di1 = new Display();
            he1.DoMyAlarm += al1.MakeAlert;      //建立关联
            he1.DoMyDisplay += di1.ShowMsg;      //建立关联
            he1.BoilWater(1);

            Heater he2 = new Heater();     //第二次烧水(水烧开,触发显示与报警事件)
            he2.Temperature = 10;
            Alarm al2 = new Alarm();
            Display di2 = new Display(); 
            he2.DoMyAlarm += al2.MakeAlert;   //建立关联
            he2.DoMyDisplay += di2.ShowMsg;   //建立关联
            he2.BoilWater(10);

            Console.Read();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值