我要处理的从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 {...}
当试图遍历类的方法X
中装配B
,它包含类的所有方法A
。 我想实现的是通过只有那些存在于派生类的方法来进行迭代。
我不认为在所有,但不同的组件问题是,即使我试图筛选方法的基础上,装配声明类型,这是行不通的。
我已经使用的各种属性试图MethodInfo
对象,但一直没能过滤了这一点。 我相信,我错过了一些愚蠢的检查,但一直与这个挣扎足够长的时间。
任何意见,将不胜感激。
您可以使用它来获取所有派生类型的组件:
Assembly b = Assembly.LoadFrom(@"c:\B.dll");
var derivedTypes = b.GetTypes().Where(t => typeof(Template).IsAssignableFrom(t));
而这款以找到该类型定义的任何方法:
Type derived = ...
var methods = derived.GetMethods(BindingFlags.Instance |
BindingFlags.Public |
BindingFlags.DeclaredOnly);
或这个:
var methods = derived.GetMethods().Where(m => m.DeclaringType == derived);
不过,如果你想找到的任何子类中定义的方法Template
(例如一个子类X
),使用此:
Type templateType = typeof(Template);
Type derived = ...
var methods = derived.GetMethods()
.Where(m => templateType.IsAssignableFrom(m.DeclaringType) &&
templateType != m.DeclaringType);