Possible Duplicate:
Use reflection to invoke an overridden base method
通常我可以从重写的方法中调用我的基类,如下所示:
public override void Foo(Bar b)
{
base.Foo(b);
}
如何通过反射进行相同的调用?
编辑:解释一下,我试图使用 AOP 来保护我的库的入口点免受未初始化操作的影响(在我的例子中,在使用库之前没有“初始化”调用) 。因此,从技术上讲,相关调用将在类内部结束(借助 AOP),但预编译的代码将编写在单独的类中。换句话说,我希望将以下建议应用于我的所有入口点:
if (!initialized)
return base.<method>(<arguments>);
我认为 Use reflection to invoke an overridden base method 中显示了 IL 技巧。会为我工作 - 我只是希望在我的情况下有一些更干净的东西,因为它感觉更合法。
最佳答案
编辑:好的,有一点澄清;您不会尝试从任一类的外部调用基类的实现。相反,您希望从被重写的类中反射性地调用父方法的实现。
...为什么?您的对象静态地知道它是什么,因此静态地知道它的基类是什么。您不能有两个基类,也不能动态地将基类“分配”给预先存在的子类。
要回答你的问题,你不能。任何使用当前实例反射调用“Foo”的尝试都将无限递归,因为 MethodInfo 的调用使方法调用就好像它来自外部(因为它确实是来自外部),因此运行时将遵循继承/重写行为。您必须使用相关问题中的 IL hack。
关于c# - 如何通过反射调用基类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619548/