.NET CFVisual Studio .NET 2002.NET 1.0Visual Studio .NET 2003.NET 1.1移动应用中级开发Visual StudioWindows.NETC#
.NET 中记录方法名





4.00/5 (21投票s)
2004 年 8 月 12 日
1分钟阅读

214264

1
本文概述了获取当前方法名和父方法名以用于日志记录的方法。
引言
在 .NET 之前,我们一直在寻找一种将当前方法名记录到日志文件中的方法,以便进行更好的日志记录。但是,没有功能可以帮助实现这一点,这成了一个未完成的任务。
但是,有了 .NET,我们可以轻松地找到当前方法名或父方法名。这是通过 System.Diagnostics
和 System.Reflection
命名空间中的 StackFrame
、StackTrace
和 MethodBase
类实现的。
StackFrame
提供有关当前进程堆栈调用中的函数调用的信息。StackTrace
是StackFrame
的集合。MethodBase
是一个抽象类,包含有关当前方法的信息。
注意:当方法中发生异常时,异常对象包含对 StackTrace
对象的引用,该引用可用于记录方法名。但是,为了在没有生成错误的情况下记录方法名,我们需要使用 StackFrame
类从堆栈中读取它。
在示例中,MethodBase
对象将引用由 StackFrame
对象返回的堆栈调用中的当前函数。要获取父方法,我们将使用 StackTrace
获取父级的 StackFrame
对象。
创建一个新的控制台应用程序
添加命名空间
using System.Diagnostics;
using System.Reflection;
创建一个名为 WhatsMyName
的新静态函数,并从 Main
函数调用它。
[STAThread]
static void Main(string[] args)
{
WhatsMyName();
}
// function to display its name
private static void WhatsMyName()
{
StackFrame stackFrame = new StackFrame();
MethodBase methodBase = stackFrame.GetMethod();
Console.WriteLine(methodBase.Name ); // Displays “WhatsmyName”
WhoCalledMe();
}
// Function to display parent function
private static void WhoCalledMe()
{
StackTrace stackTrace = new StackTrace();
StackFrame stackFrame = stackTrace.GetFrame(1);
MethodBase methodBase = stackFrame.GetMethod();
// Displays “WhatsmyName”
Console.WriteLine( " Parent Method Name {0} ", methodBase.Name );
}
注意:此功能在 .NET Compact Framework 中不可用,因为 StackFrame
类不可用。对于这种情况,您需要使用相同的方法,手动将方法名传递给日志记录函数。