使用反射查找所有公共虚拟方法并提供覆盖

时间:2011-07-19 16:38:43

标签: .net reflection override

我有一个项目,我希望能够遍历一个类的实例并找到所有标记为public virtual的方法。然后我想覆盖类的实例,以便在调用方法时我可以调用一组不同的代码。我知道如何使用反射找到类中公共的所有方法,但我无法弄清楚如何覆盖虚方法。

基本上我要使用一个代理对象,当他们调用该方法时,我想在底层对象上调用一个方法。我可以通过手动覆盖每个方法来做到这一点,但我想使用更动态的东西。

2 个答案:

答案 0 :(得分:3)

typeof(MyClass)
    .GetMethods(BindingFlags.Public | BindingFlags.Instance)
    .Where(m => m.IsVirtual);

答案 1 :(得分:2)

MethodBase有IsVirtual Property

MethodBase m = typeof(MyClass).GetMethod("MyMethod");
if (m.IsVirtual)
  // yada-yada-yada...