2

我有一大堆从基类“端口”继承的类

有谁知道如何获取从“端口”继承的所有类的所有公共方法

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

我想如果我能以某种方式获得从 Port 继承的所有类的列表,我可以这样做:

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

有人可以在这里帮忙吗?

4

2 回答 2

2

你可以使用这样的东西:

Assembly assembly = [get your assembly instance];
Type t = typeof(Port)
var methods = assembly.GetTypes()
                 .Where(p => t.IsAssignableFrom(p))
                 .SelectMany(x => x.GetMethods());
于 2013-02-07T22:05:38.047 回答
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来避免一遍又一遍地使用相同的方法 - 这取决于您之后尝试对它们做什么。

于 2013-02-07T22:05:38.650 回答