如何获取从特定类型继承的类的所有方法

本文关键字:继承 类型 有方法 何获取 获取 | 更新日期: 2023-09-27 17:58:27

我有一大堆从基类"Port"继承的类

有人知道如何获得从"端口"继承的所有类的所有公共方法吗

我知道我必须调用GetMethods方法,而您可以调用一个类型。

我想,如果我能以某种方式获得从Port继承的所有类的列表,我可以执行以下操作:

(从端口继承的所有类型)。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本身。

您可能希望使用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());