事件基于委托,用于对象间通信。首先定义EventHandler或自定义EventArgs传递数据,通过event关键字声明事件,使用OnEventName模式触发,订阅用+=,取消用-=,注意检查null并及时取消订阅以防内存泄漏。

在 C# 中,事件(Event)是一种用于实现观察者模式的机制,常用于对象间通信,比如 UI 控件响应用户操作、服务状态变更通知等。合理定义和触发事件能让代码更灵活、解耦更好。
事件的基本定义
事件基于委托(Delegate),因此定义事件前需要先定义一个委托类型,或使用系统提供的通用委托如 EventHandler 或 EventHandler。
以下是一个使用 EventHandler 定义事件的示例:
public class MyPublisher
{
// 定义事件
public event EventHandler MyEvent;
// 触发事件的方法
protected virtual void OnMyEvent()
{
MyEvent?.Invoke(this, EventArgs.Empty);
}
// 模拟条件满足时触发事件
public void DoSomething()
{
// 执行某些逻辑
Console.WriteLine(“执行操作…”);
// 触发事件
OnMyEvent();
}
}
自定义事件参数
如果需要传递额外数据,可以继承 EventArgs 创建自定义参数类。
public class MyEventArgs : EventArgs
{
public string Message { get; set; }
public MyEventArgs(string message)
{
Message = message;
}
}
然后在类中使用泛型事件:
public class MyPublisher
{
public event EventHandler CustomEvent;
protected virtual void OnCustomEvent(string msg)
{
CustomEvent?.Invoke(this, new MyEventArgs(msg));
}
public void TriggerCustomEvent()
{
OnCustomEvent(“这是自定义消息”);
}
}
订阅与取消订阅事件
其他类可以通过 += 订阅事件,用 -= 取消订阅。
class Program
{
static void Main()
{
var publisher = new MyPublisher();
// 订阅事件
publisher.MyEvent += HandleMyEvent;
publisher.CustomEvent += HandleCustomEvent;
publisher.DoSomething();
publisher.TriggerCustomEvent();
// 取消订阅
publisher.MyEvent -= HandleMyEvent;
}
static void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine(“MyEvent 被触发”);
}
static void HandleCustomEvent(object sender, MyEventArgs e)
{
Console.WriteLine($”收到消息: {e.Message}”);
}
}
注意事项与最佳实践
始终在触发事件前检查是否为 null,或使用 null 条件运算符 ?. 避免异常将触发方法命名为 OnXXX 是 .NET 的命名惯例使用 virtual 方法以便派生类可重写事件触发行为记得在适当时机取消订阅,防止内存泄漏,尤其是在长时间存在的发布者中优先使用 EventHandler 或 EventHandler,而非自定义委托,除非有特殊需求
基本上就这些。掌握事件的定义、触发和处理方式,能帮助你写出更清晰、响应性更强的 C# 程序。
以上就是C# 如何定义和触发事件_C# 事件定义与触发方法指南的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441678.html
微信扫一扫
支付宝扫一扫