我需要将一个事件的订阅者复制到另一个事件.我可以获得一个事件的订阅者(比如MyEvent [0]返回一个委托)吗?
如果这不可能,我会使用add accessor将委托添加到列表中.那会是最好的解决方案吗?
Mar*_*ell 32
C#事件/委托是多播的,因此委托本身就是一个列表.在课堂上,为了获得个人来电,您可以使用:
if (field != null)
{
// or the event-name for field-like events
// or your own event-type in place of EventHandler
foreach(EventHandler subscriber in field.GetInvocationList())
{
// etc
}
}
Run Code Online (Sandbox Code Playgroud)
但是,要一次性分配所有内容,只需使用+ =或直接赋值:
SomeType other = ...
other.SomeEvent += localEvent;
Run Code Online (Sandbox Code Playgroud)
如果您需要检查外部类事件的订阅者:
EventHandler e = typeof(ExternalClass)
.GetField(nameof(ExternalClass.Event), BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(instanceOfExternalClass) as EventHandler;
if (e != null)
{
Delegate[] subscribers = e.GetInvocationList();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17074 次 |
| 最近记录: |