web developer tips (83):通过反射从堆栈里获取调用的方法名称
2010-04-06 01:32
411 查看
原文地址:Youcangetthenameofthecallingmethodfromthestackusingreflection
几乎每个程序都需要一个日志来记录事件、错误和异常。有时候,在记录的事件里的方法名是很有用的,最简单的做法就是写一个“方法”,这个“方法”使用两个参数:调用的方法名和事件
http://www.watch-life.net/visual-studio/you-can-get-the-name-of-the-calling-method-from-the-stack-using-reflection.html
[C#]
在这个例子中,每个方法在调用的时候都需要指出它的名称。除此外,如果方法名改变了,开发者需要知道。然而,这里有个简洁的方法得到调用方法的名称,就是通过堆栈获取。因为栈顶的方法是当前被正在执行的方法,所以调用方法将是正确的。据此,可以通过跟踪实例堆栈(注意不要忘记包含System.Diagnostics)和得到frame第一索引值,得到一个来自调用方法中与StackFrame相对应的调用,最后使用反射(reflection)得到方法名。
几乎每个程序都需要一个日志来记录事件、错误和异常。有时候,在记录的事件里的方法名是很有用的,最简单的做法就是写一个“方法”,这个“方法”使用两个参数:调用的方法名和事件
[C#]
1:voidLog(stringcallingMethodName,stringeventMessage) 2:{ 3:Console.WriteLine("Eventloggedby"+callingMethodName); 4:Console.WriteLine("Event:"+eventMessage); 5: 6:}
在这个例子中,每个方法在调用的时候都需要指出它的名称。除此外,如果方法名改变了,开发者需要知道。然而,这里有个简洁的方法得到调用方法的名称,就是通过堆栈获取。因为栈顶的方法是当前被正在执行的方法,所以调用方法将是正确的。据此,可以通过跟踪实例堆栈(注意不要忘记包含System.Diagnostics)和得到frame第一索引值,得到一个来自调用方法中与StackFrame相对应的调用,最后使用反射(reflection)得到方法名。
01:usingSystem.Diagnostics; 02: 03:voidLog(stringeventMessage) 04:{ 05: 06:Console.WriteLine("Eventloggedby"+(newStackTrace()).GetFrame(1).GetMethod().Name); 07: 08:Console.WriteLine("Event:"+eventMessage); 09: 10:}
更多文章见:守望轩[ http://www.watch-life.net/]
相关文章推荐
- web developer tips (83):通过反射从堆栈里获取调用的方法名称
- web developer tips (83):通过反射从堆栈里获取调用的方法名称
- 通过反射获取及调用方法(Method)
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- java通过反射获取调用变量以及方法
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- java 通过反射获取调用类方法及属性
- java 通过反射获取方法参数列表名称
- C#中通过反射方法获取控件类型和名称
- MyBatis+Spring在注解@Autowried后通过反射的方式调用方法获取注入的Service或DAO对象为空
- 深入理解 c# 第三章 通过反射来调用和获取泛型方法
- J2SE_通过反射能获取方法参数名称吗?
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- 反射第四步 : 通过反射获取某一个类的 方法 并通过反射调用
- java 通过反射获取调用类方法及属性
- 通过反射获取类属性字段 以及 调用类方法
- java 通过反射获取调用类方法及属性
- C#通过反射获取上层调用方法信息
- Golang 通过反射获取方法名称
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。