前景提示:假设我们有一个简单的温度监控系统,其中一个温度传感器负责测量温度并触发事件,多个订阅者(监控器)对这些事件做出响应。下面是一个使用事件的实际例子
using System;
// 事件参数类,用于传递温度信息
public class TemperatureEventArgs : EventArgs
{
public double Temperature { get; set; }
public TemperatureEventArgs(double temperature)
{
Temperature = temperature;
}
}
// 温度传感器类,负责测量温度并触发事件
public class TemperatureSensor
{
// 温度变化事件
public event EventHandler<TemperatureEventArgs> TemperatureChanged;
private double currentTemperature;
public double CurrentTemperature
{
get { return currentTemperature; }
set
{
if (currentTemperature != value)
{
currentTemperature = value;
OnTemperatureChanged(new TemperatureEventArgs(value));
}
}
}
// 触发温度变化事件的方法
protected virtual void OnTemperatureChanged(TemperatureEventArgs e)
{
// 在事件触发之前执行一些逻辑
PerformPreEventLogic();
//事件名:TemperatureChanged ,OnTemperatureChanged 方法确实相对简洁,
//因为它主要负责调用 TemperatureChanged 事件。
//这里使用了 C# 6.0 引入的空值传递操作符(null-conditional operator),TemperatureChanged?.Invoke(this, e);。
//该语法在 TemperatureChanged 不为 null 时才会调用 Invoke 方法。
TemperatureChanged?.Invoke(this, e);
// 在事件触发之后执行一些逻辑
PerformPostEventLogic();
}
}
// 温度监控器类,订阅温度传感器的事件
public class TemperatureMonitor
{
public void MonitorTemperature(object sender, TemperatureEventArgs e)
{
Console.WriteLine($"Temperature Monitor: Temperature changed to {e.Temperature} °C");
}
}
class Program
{
static void Main()
{
// 创建温度传感器和监控器
TemperatureSensor sensor = new TemperatureSensor();
TemperatureMonitor monitor1 = new TemperatureMonitor();
TemperatureMonitor monitor2 = new TemperatureMonitor();
// 添加多个事件处理程序 ,TemperatureChanged 事件名字
sensor.TemperatureChanged += monitor1.MonitorTemperature;
sensor.TemperatureChanged += monitor2.MonitorTemperature;
// 模拟温度变化
sensor.CurrentTemperature = 25.5;
// 移除一个事件处理程序
sensor.TemperatureChanged -= monitor1.MonitorTemperature;
// 模拟温度再次变化
sensor.CurrentTemperature = 28.0;
Console.ReadLine();
}
}
结果:
Temperature Monitor: Temperature changed to 25.5 °C
Temperature Monitor: Temperature changed to 25.5 °C
Temperature Monitor: Temperature changed to 28 °C`
在这个例子中:
TemperatureSensor 类负责测量温度,当温度发生变化时触发 TemperatureChanged 事件。
TemperatureMonitor 类是一个温度监控器,它订阅了 TemperatureChanged 事件,当事件触发时,输出变化的温度信息。
主程序创建了一个温度传感器和两个温度监控器,并演示了添加和移除多个事件处理程序的过程。
这个例子模拟了一个简单的温度监控系统,多个监控器通过订阅传感器的事件来获取温度信息,并且可以随时添加或移除事件处理程序。这种设计模式使得系统更加灵活,新的监控器可以轻松地添加到系统中。
ps: 觉得有用 就留个赞再走吧 xiexie