C# 中委托和事件之间的差异

本文关键字:之间 事件 | 更新日期: 2023-09-18 11:27:57

下表列出了 C# 中的委托和事件之间的差异。

DelegateEvent
委托是使用委托关键字声明的。事件是使用事件关键字声明的。
委托是一个函数指针。它在运行时保存一个或多个方法的引用。事件是一种依赖于委托的通知机制
委托是独立的,不依赖于事件。事件依赖于委托,如果没有委托就无法创建。Event 是委托实例的包装器,用于防止委托的用户重置委托及其调用列表,并且仅允许在调用列表中添加或删除目标。
委托包括 Combine() 和 Remove() 方法,用于将方法添加到调用列表中。EventInfo类检查事件并挂接包含方法 AddEventHandler() 和 RemoveEventHandler() 方法的事件处理程序,以分别在调用列表中添加和删除方法。
委托可以作为方法参数传递。引发事件,但不能作为方法参数传递。
= 运算符用于分配单个方法,+= 运算符用于将多个方法分配给委托。= 运算符不能与事件一起使用,并且只有 += 和 -= 运算符可以与添加或删除事件处理程序的事件一起使用。这些方法在内部调用 AddEventHandler 和 RemoveEventHandler 方法。

在某种程度上,事件只是委托。即使您删除 event 关键字并仅使用委托,程序代码也将起作用。 但是,使用 event 关键字,我们阻止订阅者使用 = 运算符注册事件,从而删除所有处理程序。

请考虑以下示例。

示例: Event vs Delegate

public delegate void Notify();
public Notify MyDelegate;
MyDelegate = MyMethod;// valid
MyDelegate += MyMethod;// valid
public delegate void Notify();
public event Notify MyEvent;
MyEvent = MyEventHandler;// Error
MyEvent += MyEventHandler;// valid