.NET获取方法调用者的相关信息

.net相关的技术参考   在程序中,我们有些时候,需要知道调用当前方法的调用者相关信息,以便针对这些信息做一些处理。

  如,在InvokeMethod中,调用一个CalledMethod,在CalledMethod中,我们需要获取InvokeMethod的名称,参数,以及InvokeMethod所在类,命名空间。

  在C#中,我们可以使用StackTrace来实现这一切,StackTrace在System.Diagnostics命名空间下。StackTrace在系统处于调试的模式下提供的信息量最多。下面就StackTrace获取被调用者的相关信息做些举例。

获取方法

  获取最近一个调用本方法的方法名称我们使用如下方式:

StackTrace st = new StackTrace();

StackFrame sf = st.GetFrame(1); // 如果是0,则获取本函数的方法名称

Console.WriteLine("{0}", sf.GetMethod()); //这个简单获取调用方法的信息

  这里我们使用StackTrace从堆栈跟踪信息中获取到一个StackFrame(堆栈帧),在调用堆栈中,每一个函数都会被封装成一个StackFrame,每个帧里面都包含了一个MethodBase(System.Reflection.MethodBase)和一些其他围绕这个Method的一些信息,如:行号,列号,文件名等。在调试模式下,将会包含更多关于这个Method的信息,以便能够在Debug下更加准确的定位问题。

  如果要获取调用方法的具体信息,我们则需要从GetMethod()方法获取到的System.Reflection.MethodBase中进一步了解当前调用方法的信息,这个是使用 System.Reflection来处理的。具体的方式和反射是一样,这里不赘述。下面给出一个我测试用的Demo,看看如何获取到类,命名空间:

用stacktace来获取调用方法相关信息的代码

改方法在本机运行的结果如下(你运行的可能会不同)

stacktrace获取调用信息的结果图

 

Monday, April 30, 2012 | .NET技术

文章评论

No comments posted yet.

发表评论

Please add 8 and 6 and type the answer here:

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。