【C#】关于事件的使用,eg:{简单的温度监控系统}

前景提示:假设我们有一个简单的温度监控系统,其中一个温度传感器负责测量温度并触发事件,多个订阅者(监控器)对这些事件做出响应。下面是一个使用事件的实际例子

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`

在线C#

在这个例子中:

TemperatureSensor 类负责测量温度,当温度发生变化时触发 TemperatureChanged 事件。
TemperatureMonitor 类是一个温度监控器,它订阅了 TemperatureChanged 事件,当事件触发时,输出变化的温度信息。
主程序创建了一个温度传感器和两个温度监控器,并演示了添加和移除多个事件处理程序的过程。
这个例子模拟了一个简单的温度监控系统,多个监控器通过订阅传感器的事件来获取温度信息,并且可以随时添加或移除事件处理程序。这种设计模式使得系统更加灵活,新的监控器可以轻松地添加到系统中。

ps: 觉得有用 就留个赞再走吧 xiexie

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值