设计一个控制台应用程序项目,通过委托与事件监测汽车速度,车速小于60或者大于120时弹出警告
参考了这位大佬: C# 关于委托的例子.
namespace ConsoleApplication1
{
// 这里声明委托
public delegate void Speed(int newValue);
// 速度计
class SpeedTest
{
// 速度值
private int m_SpeedNumber;
public int SpeedNumber
{
get
{
// 返回当前速度值
return this.m_SpeedNumber;
}
set
{
// 判断是否有人注册该事件,如果有就调用并传入新的速度值。
if (OnSpeedChanged != null)
{
// 这里就是DotNet框架实现的委托好处,它可以根据
// 声明的形式自动匹配调用的参数表和返回值。
// 调用回调事件,将新的速度值传入
OnSpeedChanged.Invoke(value);
}
}
}
// 声明一个事件,当速度值传入的时候触发该事件
public event Speed OnSpeedChanged;
}
// 报警器
class Alerter
{
// 设置监听的速度计
public void Listen(SpeedTest speedTest)
{
// 注册速度计速度变化事件
speedTest.OnSpeedChanged += new Speed(OnChanged);
}
// 这里就是速度计变化后调用的函数
public void OnChanged(int newValue)
{
// 打印出相应的警告
if (newValue >= 120 )
{
Console.WriteLine("超速");
}else if (newValue <= 60)
{
Console.WriteLine("速度过低");
}
else
{
Console.WriteLine(string.Format("当前速度为 {0}.", newValue));
}
}
}
class Program
{
static void Main(string[] args)
{
Alerter alerter = new Alerter();
SpeedTest speedtest = new SpeedTest();
// 安装速度计,进行监听
alerter.Listen(speedtest);
// 设置新的速度值,报警器就会打印出新的警告。
speedtest.SpeedNumber = 130;
}
}
}
实现效果:
(1)速度为100
(2)速度为10
(3)速度为130