如何将事件实例的所有处理程序(委托)添加到同一事件类型的另一个事件实例?

时间:2010-07-29 10:20:35

标签: c# events

我有两个A和B班。 在A班,我有一个事件EventA

public delegate void FolderStructureChangedHandler();
public event FolderStructureChangedHandler EventA;

在B类中,我有一个名为EventB的相同事件。 在我的应用程序的方法中,我想将注册到EventA的所有处理程序添加到事件EventB

A classA = new classA();
classA.EventA += delegate1();
classA.EventA += delegate2();

B classB = new classB();
classB.EventB += classA.EventA;

这会引发错误“......事件'EventA'只能出现在+ =或 - = ...的左侧”。我不知道怎么做。

我想办法在EventA中枚举所有处理程序,但不知道如何操作。 请帮忙。

2 个答案:

答案 0 :(得分:4)

您可以访问事件的InvocationList,但只能访问类内部。

所以你的解决方案看起来像:

class A
{
   public event FolderStructureChangedHandler EventA;

   public void CopyHandlers(B b)
   {
       var handlers = EventA.GetInvocationList();
            foreach (var h in handlers)
            {

                b.EventB += (EventHandler) h; 
            }
   } 
}

但它不漂亮。

答案 1 :(得分:2)

事件与属性有点类似:在属性中,您有一个支持字段和get / set访问器。使用自动属性,您无权访问支持字段。

类似地,事件具有支持字段和添加/删除访问者。如果您未指定任何内容,则会自动创建。您可以尝试在类A中创建一个支持字段,并在类B中使用thiat数据。有关此类支持字段,请参阅http://msdn.microsoft.com/en-us/library/8627sbea(VS.71).aspx的示例2。