📅  最后修改于: 2023-12-03 14:59:43.519000             🧑  作者: Mango
在 C# 中,我们可以使用一些方法来获取当前调用方法的名称。在本文中,我们将讨论三种不同的方法:
MethodInfo
类型的 GetCurrentMethod()
方法StackTrace
类型的 GetFrame()
方法CallerMemberName
属性MethodInfo
类型是 .NET Framework 中的一个类型,它包含了程序集、类及其成员的详细信息。GetCurrentMethod()
方法可以获取当前调用方法的 MethodInfo
对象,我们可以通过 Name
属性来获取方法名称。这种方法需要使用反射,性能消耗较高。请看下面的代码片段:
using System.Reflection;
public class MyClass
{
public void MyMethod()
{
MethodBase method = MethodBase.GetCurrentMethod();
string methodName = method.Name;
Console.WriteLine("当前调用方法名称:" + methodName);
}
}
StackTrace
类型用于获取当前执行路径上的堆栈信息。通过 StackTrace
类型的 GetFrame()
方法可以获取当前调用方法的 StackFrame
对象,我们可以通过 GetMethod()
方法获取方法名称。这种方法需要查看调用堆栈,性能消耗也较高。请看下面的代码片段:
using System.Diagnostics;
public class MyClass
{
public void MyMethod()
{
StackFrame frame = new StackFrame(1);
MethodBase method = frame.GetMethod();
string methodName = method.Name;
Console.WriteLine("当前调用方法名称:" + methodName);
}
}
C# 5.0 引入了 CallerMemberName
属性,它可以在编译时获取当前调用方法的名称。这种方法不需要使用反射,也不需要查看堆栈,是最高效的方法。请看下面的代码片段:
public class MyClass
{
public void MyMethod([CallerMemberName] string methodName = "")
{
Console.WriteLine("当前调用方法名称:" + methodName);
}
}
以上就是获取当前调用方法名称的三种方法。根据具体的使用场景来选择适当的方法,以达到最优的性能和效果。