MethodBase无反射
我的一个朋友今早(太早,如果你问我。只要我一律有点让我的发动机会)询问有关获取的信息,目前执行的方法我。 嗯,这是相当容易,对不对? 我们System.Reflection,使我们研究的信息,如目前的代码库的,喜欢把自己作为一个字符串的方法的名称。
我们只是简单地做一个:
C#中:
- . MethodBase . GetCurrentMethod ( ) 系统 。 反射。MethodBase。GetCurrentMethod()
巴姆,我们当前的方法名。 但是,他想这样做无反射。
那么,我们必须作出这样的一行代码长一点考虑到这一制约因素,但它实际上并不复杂。 我们知道,这是每一个任意的线程,我们取得这些StackFrame是动态的基础上堆栈的数据结构推对象之一执行的方法(即我们的调用栈推上一个新的StackFrame对象)。 这些StackFrame对象包含的乐趣各种信息,并且这些信息可以提取及为何策划的目的,你心目中的使用。 但要记住,一个方法很多信息包含在调试文件,因此,当您切换到发布版本你可以逃避一些数据,你是审讯的。
因此,首先,让我们产生一个新的StackFrame对象:
C#中:
现在我们有一个StackFrame对象,我们知道StackFrame包含MethodBase信息可以被用来装饰各种信息。
因此,让我们做一些MethodBase保湿:
C#中:
- ; MethodBase methodBase = stackFrame。GetMethod();
现在,你有那些准备好,您就可以开始让所有的娱乐信息!
例如:
C#中:
- ; MethodBase methodBase = stackFrame。GetMethod();
- ; 字符串 methodName的= methodBase。 名称 ;
- ; 布尔 isStaticMethod = methodBase。IsStatic;
- ; 布尔 isPublicMethod = methodBase。IsPublic;
准备去! ![]()
相关岗位:
- ToolPart类与System.Reflection
- 海关总署获取路径使用的思考
- 使用泛型楼共享点对象
- AspnetSchemaversionsDTO局部类
- 静态的Web部件EditorPart类版本












































“但是,他想这样做SAN的思考”
那么,我们假设StackFrame使用内部得到这个信息?
如果对“教育目的”我想这是一个公平的问题,但我会选择System.Reflection.MethodBase.GetCurrentMethod()
使用StackFrame之前任何一天。
/乔纳斯
评论由乔纳斯- 2008年5月7日@ 下午1时52
[...] MethodBase没有反思-亚当Buenz显示为在methodbase获得通过堆栈帧的替代技术。 我怀疑,如果这其实是反映了自由-我怀疑堆栈帧是利用反射使用-但它确实说明了该stackframe有用的功能。 [...]
Pingback的反思视角-克里斯阿尔科克»早晨的啤酒,#89 - 2008年5月8日@ 上午12点35分
谢谢! 这使我greately。 我需要写的代码将显示我在哪里得到的程序运行,我并建立一个堆栈跟踪辅助方法排序一块。
乔治
评论由乔治C#开发 - 2008年12月23日@ 上午08点35分