我有一大堆继承自基类'Port'的类
有没有人知道如何获取从“Port”继承的所有类的所有公共方法
我知道我必须调用GetMethods方法并将其称为类型。
我想如果我能以某种方式获得从Port I继承的所有类的列表,可以像:
(所有类型都从端口继承).SelectMany(x => x.GetMethods());
有人可以帮忙吗?
答案 0 :(得分:2)
您可以使用以下内容:
Assembly assembly = [get your assembly instance];
Type t = typeof(Port)
var methods = assembly.GetTypes()
.Where(p => t.IsAssignableFrom(p))
.SelectMany(x => x.GetMethods());
答案 1 :(得分:2)
好的,现在我们知道他们在同一个集会中,我怀疑你想要:
var methods = from type in typeof(Port).Assembly.GetTypes()
where typeof(Port).IsAssignableFrom(type)
from method in type.GetMethods()
select method;
又名
var methods = typeof(Port).Assembly.GetTypes()
.Where(type => typeof(Port).IsAssignableFrom(type))
.SelectMany(type => type.GetMethods());
请注意,将在要获取的类型列表中包含Port
。
您可能希望使用BindingFlags.DeclaredOnly
来避免一遍又一遍地使用相同的方法 - 这取决于您之后尝试使用它们。