委托是类型安全的函数指针,可引用方法并支持多播调用;事件基于委托,用于封装发布-订阅模式,限制外部直接调用,确保安全的通知机制。

在 .NET 中,委托(Delegate) 和 事件(Event) 是实现回调机制和松耦合设计的重要工具。它们广泛应用于异步编程、GUI 交互、观察者模式等场景。理解它们的用法和区别,对编写高质量的 C# 程序非常关键。
委托是一种类型安全的函数指针,它定义了方法的签名(参数和返回值),可以引用一个或多个具有相同签名的方法。委托允许将方法作为参数传递,也可以在运行时动态绑定方法。
声明委托:
public delegate void MyDelegate(string message);这行代码定义了一个名为 MyDelegate 的委托,它可以指向任何返回值为 void、参数为 string 的方法。
使用委托示例:
public class Logger// 使用
MyDelegate del = new Logger().LogToConsole;
del += new Logger().LogToFile;
del("程序启动"); // 两个方法都会执行
上述代码中,委托实例 del 同时绑定了两个方法,调用时会依次执行,这就是多播委托(Multicast Delegate)。
事件是基于委托的封装,用于实现发布-订阅模式。事件允许一个类在特定动作发生时通知其他类,而无需知道具体是谁在监听。
事件通常用于对象间的通信,比如按钮点击、数据更新等。
声明事件:
public class Button // 触发事件
public void OnClick()
{
if (Click != null)
Click("按钮被点击");
}
}
订阅事件:
Button btn = new Button();事件的关键点在于:外部类可以使用 += 和 -= 订阅或取消订阅,但不能直接调用事件或赋值为 null(除非在声明类内部)。
虽然事件基于委托,但两者有本质区别:
实际开发中,委托和事件非常实用:
使用 EventHandler 或泛型 EventHandler<TEventArgs> 是更标准的做法:
public class OrderEventArgs : EventArgspublic class OrderService
{
public event EventHandler
protected virtual void OnOrderCreated(string orderId)
{
OrderCreated?.Invoke(this, new OrderEventArgs { OrderId = orderId });
}
public void CreateOrder()
{
// 创建订单逻辑...
OnOrderCreated("SO001");
}
}
基本上就这些。掌握委托和事件,能让你写出更灵活、可扩展的代码。关键是理解它们的协作方式:委托提供调用能力,事件提供安全的通知机制。
以上就是.NET中委托(Delegate)和事件(Event)的用法_委托事件使用详解的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号