通常我可以在这样的重写方法中调用我的基类:
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技巧对我有用 - 我只是希望在我的案例中有更清洁的东西,因为它感觉更合理。
答案 0 :(得分:2)
编辑:好的,所以有点澄清;你不是试图从类外部调用基类的实现。相反,在重写的类中,您希望反射性地调用父方法的实现。
......为什么?您的对象静态地知道它是什么,因此静态地知道它的基类是什么。您不能拥有两个基类,也不能将基类动态“分配”给预先存在的子类。
要回答你的问题,你不能。任何使用当前实例反复调用“Foo”的尝试都将无限递归,因为MethodInfo的调用使得方法调用就好像它来自外部(因为它是),因此运行时将遵循继承/覆盖行为。您将不得不使用相关问题中的IL hack。