我有两个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中枚举所有处理程序,但不知道如何操作。 请帮忙。
答案 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。