所以我有以下情况:
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 也是如此。
我知道我可以通过构造函数来实现该订阅,但这不是这里的选择。而且继承的类也无法访问基类的子类。
在这种情况下最好的解决方案是什么? 谢谢!
答案 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;
}