我需要将一个事件的订阅者复制到另一个事件。我可以获取事件的订阅者(例如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;