https://stackoverflow.com/a/12000050/2528063
你必须知道,一件事只不过是一件小事
add
-以及
remove
-方法围绕私有(隐藏)委托字段,就像属性只是围绕私有(也隐藏)支持字段的get-and-set方法一样。说到这里,您可以访问该委托,该委托通常与您的事件具有完全相同的名称:
var delegateField = typeof(MyExtension).GetField("MyEvent", BindingFlags.NonPublic)?.GetValue(target);
在我们的特殊情况下,我们有自己的访问器,因此代理的名称直接在的源cde中提供
MyExtension
var delegateField = typeof(MyExtension).GetField("myEvent", BindingFlags.NonPublic)?.GetValue(target);
现在我们有了支持委托,我们可以很容易地调用它:
delegateField?.DynamicInvoke(new MyArgs());
当然,我们应该添加一些健全性检查,例如,对于代理被重命名的情况,因此找不到代理,但我想你明白了。