MethodBase没有反思
我的一个朋友今早(太早,如果你问我。我现在只要花一律有点让我的发动机会)问我目前得到执行方法的信息。 嗯,这是相当容易,对不对? 我们的System.Reflection,使我们能够寻找到像,像得到一个字符串的方法名信息当前代码库。
我们只是简单地做一:
C#中:
- . MethodBase . GetCurrentMethod ( ) 系统 。 思考。MethodBase。GetCurrentMethod()
巴姆,我们当前的方法名。 但是,他想这样做SAN的思考。
嗯,我们要作出这样的一行代码有点长考虑到这一制约因素,但它确实是没有那么复杂。 我们知道,在每个线程中执行任意我们得到的是那些到库动态堆栈的数据结构(即我们推到一个新的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;
准备去! ![]()
































“但是,他想这样做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分