c# - 如何重用引用类中的事件?
问题描述
所以我有以下场景:
class A
{
public event MyEventHandler MyEvent;
}
abstract class B : MarshalByRefObject
{
public event MyEventHandler MySecondEvent;
private A subClass;
}
现在我想要实现的是,B 类,MySecondEvent基本上结合了 A 类的事件MyEvent ,所以当A 事件命中时,B也一样。
我知道我可以通过构造函数实现订阅,但这不是一个选项。而且继承的类也不能访问基类的子类。
在这种情况下,最好的解决方案是什么?谢谢!
解决方案
由于无论如何您都在使用反射,因此我将使用它来链接调用事件。
这是答案的修改形式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;
}
推荐阅读
- java - 在Java中从没有原始对象信息的字符串反序列化对象
- python - 将字符串转换为具有多个值的字典
- javascript - After Effects Aerender 和 JSON sourceData
- dart - 如何将 FAB 转换为 Flutter 中的操作菜单
- c# - C# 代码适用于 Visual Studio 2019,但不适用于在线编译器
- vuex - 带有 Vuex 的 Vmodel 未绑定
- java - HTTP 状态 404 - 未找到 Servlet
- c# - 将 numericUpdown 中的值与文本框上的值分开并显示在第三个文本框上时出现问题
- c++ - 错误:“cyl_bessel_j”不是“std”的成员
- php - 一次性加密