【发布时间】:2013-05-12 21:30:27
【问题描述】:
我想处理从类 A 派生的类的方法。类 A 和派生类位于不同的程序集中。我使用反射从派生程序集中获取所有 System.Type 并遍历它们的方法。
Assembly A: class Template {...}
Assembly B: class X: A.Template {...}
Assembly B: class Y: A.Template {...}
Assembly B: class Z: A.Template {...}
当我尝试在程序集B 中迭代X 类的方法时,它包括A 类的所有方法。我想要实现的是仅遍历派生类中存在的那些方法。
我认为在不同的程序集中根本不重要,但即使我尝试根据程序集过滤方法的声明类型,它也不起作用。
我曾尝试使用MethodInfo 对象的各种属性,但无法将其过滤掉。我确信我错过了一些愚蠢的检查,但已经为此苦苦挣扎了足够长的时间。
任何建议将不胜感激。
【问题讨论】:
-
BindingFlags.DeclaredOnly有帮助吗? -
您是否尝试过使用
DeclaredOnly绑定标志获取方法?typeof(X).GetMethods(BindingFlags.DeclaredOnly) -
谢谢。我实际上是在寻找私有方法、字段和属性,但没有意识到您必须使用
BindingFlags.Instance | BindingFlags.NonPublic标志。那,除了 BindingFlags.DeclaredOnly 工作。
标签: c# .net inheritance reflection