委托示例(水壶烧水)
假设我们有个高档的热水器,我们给它通上电,当水温超过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();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏