C# 如何获取继承自特定类型的类的所有方法

C# 如何获取继承自特定类型的类的所有方法,c#,C#,我有一大堆从基类“Port”继承的类 有人知道如何获取从“端口”继承的所有类的所有公共方法吗 我知道我必须调用GetMethods方法,而您将其作为一个类型取消 我想,如果我能以某种方式获得从端口继承的所有类的列表,我可以这样做: (从端口继承的所有类型) 这里有人能帮忙吗?你可以用这样的方法: Assembly assembly = [get your assembly instance]; Type t = typeof(Port) var methods = assembly.GetTyp

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

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

我知道我必须调用GetMethods方法,而您将其作为一个类型取消

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

(从端口继承的所有类型)


这里有人能帮忙吗?

你可以用这样的方法:

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

您可以使用以下内容:

Assembly assembly = [get your assembly instance];
Type t = typeof(Port)
var methods = assembly.GetTypes()
                 .Where(p => t.IsAssignableFrom(p))
                 .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;
阿卡

请注意,这将在要获取的类型列表中包括
端口本身


您可能希望使用BindingFlags.DeclaredOnly来避免重复使用相同的方法-这取决于您以后尝试使用它们做什么。

好的,现在我们知道它们在同一个程序集中,我怀疑您想要:

var methods = from type in typeof(Port).Assembly.GetTypes()
              where typeof(Port).IsAssignableFrom(type)
              from method in type.GetMethods()
              select method;
阿卡

请注意,这将在要获取的类型列表中包括
端口本身


您可能希望使用
BindingFlags.DeclaredOnly
来避免重复使用相同的方法-这取决于您以后尝试对它们执行的操作。

您知道所有派生类型是否都将位于同一程序集中(或者至少要查看哪些程序集中)?是的,这一点很好。我知道它们将在端口程序集中,所以也许我可以使用类似assembly.GetAssembly(typeof(Port))的东西作为获取正确程序集的开始?您知道所有派生类型是否都将在同一程序集中(或者至少要查看哪些程序集)?是的,这一点很好。我知道它们将在端口程序集中,所以也许我可以使用类似assembly.GetAssembly(typeof(Port))的东西作为获取正确程序集的开始?