2013-02-07 147 views
2

我有类的一大堆,从基类“端口”继承继承所有方法如何获得类从特定类型

有谁知道如何让所有的所有类的公共方法是从'端口'继承

我知道我必须调用GetMethods方法,并将其称为类型。

我想如果我能在某种程度上得到所有的类从港口继承我能去像列表:

(所有类型的端口继承).SelectMany(X => x.GetMethods());

任何人都可以帮忙吗?

+4

你是否知道所有派生类型是否在同一个程序集中(或者至少要查看哪些程序集)? –

+0

是的,好点。我知道他们将在端口组装中,所以也许我可以使用类似Assembly.GetAssembly(typeof(Port))的东西作为开始,以获得正确的程序集? – user2005657

回答

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本身在l需要获取的类型。

您可能想要使用BindingFlags.DeclaredOnly来避免一次又一次地获取相同的方法 - 这取决于您之后尝试使用的方法。

2

您可以使用这样的事情:

Assembly assembly = [get your assembly instance]; 
Type t = typeof(Port) 
var methods = assembly.GetTypes() 
       .Where(p => t.IsAssignableFrom(p)) 
       .SelectMany(x => x.GetMethods());