C# 中委托和事件之间的差异
本文关键字:之间 事件 | 更新日期: 2023-09-18 11:27:57
下表列出了 C# 中的委托和事件之间的差异。
Delegate | Event |
---|---|
委托是使用委托关键字声明的。 | 事件是使用事件关键字声明的。 |
委托是一个函数指针。它在运行时保存一个或多个方法的引用。 | 事件是一种依赖于委托的通知机制 |
委托是独立的,不依赖于事件。 | 事件依赖于委托,如果没有委托就无法创建。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