MethodBase没有反思

我的一个朋友今早(太早,如果你问我。我现在只要花一律有点让我的发动机会)问我目前得到执行方法的信息。 嗯,这是相当容易,对不对? 我们的System.Reflection,使我们能够寻找到像,像得到一个字符串的方法名信息当前代码库。
我们只是简单地做一:

C#中:
  1. . MethodBase . GetCurrentMethod ( ) 系统思考。MethodBase。GetCurrentMethod()

巴姆,我们当前的方法名。 但是,他想这样做SAN的思考。
嗯,我们要作出这样的一行代码有点长考虑到这一制约因素,但它确实是没有那么复杂。 我们知道,在每个线程中执行任意我们得到的是那些到库动态堆栈的数据结构(即我们推到一个新的StackFrame对象调用栈)推StackFrame对象的一种方法。 这些StackFrame对象包含各种信息的乐趣,并且这些信息可以被提取,不管什么阴谋目的使用你的想法。 但请记住,很多信息的方法是在调试文件中包含的,所以当你切换到发行版本中你可以逃避一些数据,你是为审讯。
所以,首先,让我们产生一个新的StackFrame对象:

C#中:
  1. ; StackFrame stackFrame = StackFrame();

现在我们有一个StackFrame对象,我们知道,StackFrame包含MethodBase信息,可以被用来装饰各种信息。
所以,让我们做一些MethodBase保湿:

C#中:
  1. ; StackFrame stackFrame = StackFrame();
  2. ; MethodBase methodBase = stackFrame。GetMethod();

现在,你有那些准备好了,你就可以开始让所有的乐趣信息!
例如:

C#中:
  1. ; StackFrame stackFrame = StackFrame();
  2. ; MethodBase methodBase = stackFrame。GetMethod();
  3. ; 字符串 methodName的= methodBase。 名称 ;
  4. ; 布尔 isStaticMethod = methodBase。IsStatic;
  5. ; 布尔 isPublicMethod = methodBase。IsPublic;

准备去! :)

  • 分享/书签

3评论»

  1. “但是,他想这样做SAN的思考”

    那么我们假设StackFrame使用内部得到这个信息?

    如果是为了“教育目的的”我猜这是一个公平的问题,但我会选择System.Reflection.MethodBase.GetCurrentMethod()
    使用前StackFrame任何一天。

    /乔纳斯

    评论由乔纳斯- 2008年5月7日@ 下午1点52

  2. [...] MethodBase没有反思 - 亚当Buenz显示为在methodbase获得通过堆栈帧的替代技术。 如果这是我的问题其实反映了自由 - 我怀疑堆栈帧是利用反射使用 - 但它确实说明了stackframe有用的功能。 [...]

    Pingback由反思视角-克里斯阿尔科克»早晨啤酒#89 - 2008年5月8日@ 上午12点35分

  3. 谢谢! 这使我greately。 我需要写代码,会告诉我在那里得到的程序运行,我没有通过创建堆栈跟踪辅助方法排序一块。
    乔治

    评论由乔治C#开发 - 2008年12月23日@ 上午08点35分

RSS饲料。评论对这个职位 引用网址

发表评论