您的位置:首页 > 科技 > IT业 > 代理网址怎么设置_装修网线_上海seo推广整站_怎么做一个网页

代理网址怎么设置_装修网线_上海seo推广整站_怎么做一个网页

2025/4/21 22:46:57 来源:https://blog.csdn.net/roy2006/article/details/145945271  浏览:    关键词:代理网址怎么设置_装修网线_上海seo推广整站_怎么做一个网页
代理网址怎么设置_装修网线_上海seo推广整站_怎么做一个网页

在 C# 中,事件(Event) 是委托(Delegate)的封装,用于实现观察者模式(Observer Pattern)。


事件编程三要素

  1. 定义委托(约定事件签名)
  2. 声明事件(基于委托)
  3. 触发事件(在满足条件时调用)

示例:温度监控报警系统

场景:当现在的温度超过 阈值时,就触发事件通知

using System;// 1. 定义自定义事件参数(传递数据),
// 这个是 当事件发生时候,要传递的参数, 这个类要继承 EventArgs,这里封装了当前温度属性(只读属性)
public class TemperatureChangedEventArgs : EventArgs
{public double CurrentTemperature { get; }public TemperatureChangedEventArgs(double temperature){CurrentTemperature = temperature;}
}// 2. 定义事件发布者(Publisher)
public class TemperatureMonitor
{// 3. 声明基于委托的事件(使用 EventHandler<T> 泛型)public event EventHandler<TemperatureChangedEventArgs> OnTemperatureExceeded;private double _threshold; //温度阈值public TemperatureMonitor(double threshold){_threshold = threshold;}public void UpdateTemperature(double newTemperature){if (newTemperature > _threshold){// 4. 触发事件(安全调用), 线程安全调用 实例化的委托OnTemperatureExceeded?.Invoke(this, new TemperatureChangedEventArgs(newTemperature));}}
}// 5. 定义事件订阅者(Subscriber)
public class AlertSystem
{public AlertSystem(TemperatureMonitor monitor){// 6. 订阅事件monitor.OnTemperatureExceeded += HandleOverheat;}// 7. 事件处理方法(符合委托签名)private void HandleOverheat(object sender, TemperatureChangedEventArgs e){Console.WriteLine($"警报:温度超标!当前温度 {e.CurrentTemperature}°C");}
}// 使用示例
class Program
{static void Main(){var monitor = new TemperatureMonitor(100); // 阈值设为100°Cvar alert = new AlertSystem(monitor);monitor.UpdateTemperature(99); // 不会触发monitor.UpdateTemperature(105); // 触发事件,输出警报}
}

关键点说明

  1. 事件参数(EventArgs)

    • 继承 EventArgs,用于传递事件相关数据(如温度值)。
  2. 事件声明

    • 使用 event 关键字,命名建议以 On 开头(如 OnTemperatureExceeded)。
  3. 事件触发

    • 通过 ?.Invoke() 安全调用(避免空引用异常)。
  4. 订阅与取消

    • 使用 += 订阅事件,-= 取消订阅。
  5. 线程安全

    • 可在多线程场景中使用 lock 保护事件触发过程。

输出结果

警报:温度超标!当前温度 105°C

典型应用场景

  • 用户界面(如按钮点击事件)
  • 异步操作完成通知
  • 传感器数据实时监控
  • 游戏中的状态变化(如角色血量归零)

通过事件机制,可以实现松耦合的代码结构,让发布者和订阅者独立演化。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com