c# - 如何通过反射调用基类的方法?

标签 c# reflection

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/

相关文章:

java - 在 Java 中使用反射

postgresql - golang reflect for sql scan报错

c# - 比较两个 DateTimeOffset 对象

c# - 如何检查请求是否进入具有 [Authorize] 属性的方法?

c# - 将 Guid 与字符串进行比较

c# - 将 c# 按引用类型转换为匹配的非按引用类型

c# - 如何在解决方案(内部)中使用其他项目的类?

c# - 为什么我的 C# 中的 List.Sort 方法颠倒了列表的顺序?

使用 jdbc 时泛型类型的 java 反射

java - 为什么我可以在 InvocableHandler 的 invoke() 方法中调用 proxy.getClass() ?