如何重用被引用类的事件?

时间:2019-03-10 17:47:42

标签: c# events marshalling

所以我有以下情况:

class A
{
  public event MyEventHandler MyEvent;
}

abstract class B : MarshalByRefObject
{
  public event MyEventHandler MySecondEvent;
  private A subClass;
}

现在我想要实现的是 Class B,MySecondEvent ,基本上将 Class A 中的事件 MyEvent 组合在一起,所以当< strong>事件点击, B 也是如此。

我知道我可以通过构造函数来实现该订阅,但这不是这里的选择。而且继承的类也无法访问基类的子类。

在这种情况下最好的解决方案是什么? 谢谢!

1 个答案:

答案 0 :(得分:1)

由于您仍然在使用反射,因此我将使用它来链接调用事件。

这是答案https://stackoverflow.com/a/586156/6824955

的修改形式
class A
{
    public event EventHandler MyEvent;
}

abstract class B : MarshalByRefObject
{
    public B()
    {
        MySecondEvent += InvokeSubClass;
    }

    private void InvokeSubClass(object o, EventArgs e)
    {
        var eventDelegate = (MulticastDelegate)subClass.GetType()
            .GetField("MyEvent", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
            .GetValue(subClass);

        if (eventDelegate != null)
        {
            foreach (var handler in eventDelegate.GetInvocationList())
            {
                handler.Method.Invoke(handler.Target, new object[] { subClass, e });
            }
        }
    }

    public event EventHandler MySecondEvent;
    private A subClass;
}