通过reflection确定派生类
我想处理从类A派生的类的方法。类A和派生类驻留在不同的程序集中。 我使用reflection从派生的程序集中获取所有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
对象的各种属性,但无法过滤掉它。 我确信我错过了一些愚蠢的检查,但一直在努力解决这个问题。
任何意见,将不胜感激。
您可以使用它来获取程序集中的所有派生类型:
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
的子类)上定义的方法,请使用:
上述就是C#学习教程:通过reflection确定派生类分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Type templateType = typeof(Template); Type derived = ... var methods = derived.GetMethods() .Where(m => templateType.IsAssignableFrom(m.DeclaringType) && templateType != m.DeclaringType);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012137.html