我需要将一个事件的订阅者复制到另一个事件。我可以获取事件的订阅者(例如MyEvent [0]返回委托(delegate))吗?

如果不可能,我将使用添加访问器将委托(delegate)添加到列表中。那将是最好的解决方案吗?

最佳答案

C#事件/代理是多播的,因此委托(delegate)本身就是一个列表。在类(class)中,要获取单个调用者,可以使用:

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
    }
}

但是,要一次全部分配,只需使用+ =或直接分配:
SomeType other = ...
other.SomeEvent += localEvent;

09-26 18:47
查看更多