c#使用反射从底层类型获取方法名

本文关键字:类型 获取 方法 反射 | 更新日期: 2023-09-27 18:19:14

我想列出底层类型中的所有方法名。

我试着

var methods = this.GetType().UnderlyingSystemType.GetMethods();

但不工作

编辑

新增示例

public class BaseClass
{
   public BaseClass()
   {
         var methods = this.GetType().UnderlyingSystemType.GetMethods();
   }
}
public class Class1:BaseClass
{
   public void Method1()
   {}
   public void Method2()
   {}
}

我需要收集Method1和Method 2

c#使用反射从底层类型获取方法名

您提供的代码可以工作。

System.Exception test = new Exception();
var methods = test.GetType().UnderlyingSystemType.GetMethods();
foreach (var t in methods)
{
    Console.WriteLine(t.Name);
}

返回
get_Message
get_Data
GetBaseException
get_InnerException
get_TargetSite
get_StackTrace
get_HelpLink
set_HelpLink
get_Source
set_Source
ToString
GetObjectData
GetType
Equals
GetHashCode
GetType
编辑:

这是你想要的吗?

Class1 class1 = new Class1();
var methodsClass1 = class1.GetType().GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
BaseClass baseClass = new BaseClass();
var methodsBaseClass = baseClass.GetType().GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
foreach (var t in methodsClass1.Where(z => methodsBaseClass.FirstOrDefault(y => y.Name == z.Name) == null))
{
    Console.WriteLine(t.Name);
}

试试

MethodInfo[] methodInfos =
typeof(MyClass).GetMethods(BindingFlags.Public |
                                                      BindingFlags.Static);
here is an example on how to use reflection to get the Method names
replace MyObject with your Object / Class
using System.Reflection;
MyObject myObject;//The name of the Object
foreach(MethodInfo method in myObject.GetType().GetMethods())
 {
    Console.WriteLine(method.ToString());
 }

问题在于您在BaseClass的构造函数中调用的GetType的重写。

如果您创建Class1类型的实例,并查看您拥有的方法,您将看到所有6个方法。

如果你创建一个BaseClass类型的实例,你只会看到4个方法——来自Object类型的4个方法。

通过创建子类的实例,您隐式地调用BaseClass中的构造函数。当它使用GetType()时,它使用重写的Class1类型的虚拟方法,该方法返回预期的响应。