【问题标题】:Use reflection to find all public virtual methods and provide an override使用反射查找所有公共虚拟方法并提供覆盖
【发布时间】:2011-07-19 16:38:43
【问题描述】:

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

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

【问题讨论】:

  • 有趣的问题。那将是一个相当的黑客。你想要这个有什么目的?

标签: .net reflection overriding


【解决方案1】:
typeof(MyClass)
    .GetMethods(BindingFlags.Public | BindingFlags.Instance)
    .Where(m => m.IsVirtual);

【讨论】:

  • 好的,所以现在我需要一种方法来将该方法替换为委托。这意味着当有人调用它时,我想改为执行我的委托,将方法调用中的所有参数传递给我的委托。
  • @user:发布一个新问题来问这个问题。另见DynamicObject.TryGetMember()
【解决方案2】:

MethodBase 有一个IsVirtual Property

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

【讨论】:

  • 好的,所以现在我需要一种方法来将该方法替换为委托。这意味着当有人调用它时,我想改为执行我的委托,将方法调用中的所有参数传递给我的委托。
猜你喜欢
  • 2018-11-16
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多