我有类的一大堆,从基类“端口”继承继承所有方法如何获得类从特定类型
有谁知道如何让所有的所有类的公共方法是从'端口'继承
我知道我必须调用GetMethods方法,并将其称为类型。
我想如果我能在某种程度上得到所有的类从港口继承我能去像列表:
(所有类型的端口继承).SelectMany(X => x.GetMethods());
任何人都可以帮忙吗?
我有类的一大堆,从基类“端口”继承继承所有方法如何获得类从特定类型
有谁知道如何让所有的所有类的公共方法是从'端口'继承
我知道我必须调用GetMethods方法,并将其称为类型。
我想如果我能在某种程度上得到所有的类从港口继承我能去像列表:
(所有类型的端口继承).SelectMany(X => x.GetMethods());
任何人都可以帮忙吗?
好了,现在我们知道他们是在同一程序,我怀疑你想:
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
本身在l需要获取的类型。
您可能想要使用BindingFlags.DeclaredOnly
来避免一次又一次地获取相同的方法 - 这取决于您之后尝试使用的方法。
您可以使用这样的事情:
Assembly assembly = [get your assembly instance];
Type t = typeof(Port)
var methods = assembly.GetTypes()
.Where(p => t.IsAssignableFrom(p))
.SelectMany(x => x.GetMethods());
你是否知道所有派生类型是否在同一个程序集中(或者至少要查看哪些程序集)? –
是的,好点。我知道他们将在端口组装中,所以也许我可以使用类似Assembly.GetAssembly(typeof(Port))的东西作为开始,以获得正确的程序集? – user2005657