代码之家  ›  专栏  ›  技术社区  ›  zeocrash

获取调用方法的名称

  •  4
  • zeocrash  · 技术社区  · 16 年前

    基本上,我已经有了一个Web服务,我正在尝试将某种用法登录到其中。 为此,我创建了一个使用日志方法的类。 我在服务上安装类,然后在每个Web方法中调用logging方法。

    我正试图找到一种方法来获取调用loggong方法的方法的名称

    Public sub tstmethod
    log_object.log_method
    end sub
    

    在这种情况下,我要查找的返回名称是“tstmethod”

    我见过的每一个地方都说过

    Dim stackframe As New Diagnostics.StackFrame
    Return stackframe.GetMethod.Name.ToString
    

    或使用

    Dim stackframe As New Diagnostics.StackFrame
    Return stackframe.GetMethod.DeclaringType.FullName
    

    我在Logging方法中调用的

    getmethod.name.toString返回日志方法的名称

    GetMethod.DeclaringType.FullName返回日志类的名称

    无论我做什么,我都找不到一种方法来获取在这种情况下调用日志方法“tstmethod”的方法的名称。

    7 回复  |  直到 10 年前
        1
  •  12
  •   Vinay Sajip    16 年前

    您需要实例化 StackFrame 使用适当的构造函数。例如,

    Dim stackframe As New Diagnostics.StackFrame(1)
    

    将跳过一个堆栈帧(日志记录方法本身),并获取该方法调用方的帧。

    也就是说,如果可能的话,我强烈建议使用标准的日志记录机制,例如 log4net .

        2
  •  8
  •   Er. ßridy Arun Prakash    11 年前

    我认为上述声明可以写成一行:

    MsgBox((New System.Diagnostics.StackTrace).GetFrame(1).GetMethod.Name)
    

    这将显示一个与调用方法名相同的消息框。

        3
  •  4
  •   Jacob Schoen    13 年前

    VB.NET

    System.Reflection.MethodBase.GetCurrentMethod.Name()
    
        4
  •  0
  •   Pete OHanlon    16 年前

    您应该能够从stackframe中得到它,构造函数告诉它链上要有多少帧,因此获取父级将使用1(帧是基于零的,所以0是当前方法):

    Dim stackTrace as New Diagnostics.StackFrame(1)
    Return stackTrace.GetMethod.Name
    
        5
  •  0
  •   David Hall    16 年前

    我正在使用此代码获取调用方法

    string methodName = new StackFrame( 1, true ).GetMethod().Name;
    methodName = " [" + methodName + "]";
    return methodName;
    

    记住添加命名空间诊断

        6
  •  0
  •   Ramanathan RM    10 年前

    我添加调用表单作为所有子例程和函数的第一个参数 与被调用函数(Me、Para1、Para2……)类似,这样我就可以识别调用表单,并在被调用的例程中使用其名称或文本。

        7
  •  -2
  •   Migol    16 年前

    不要尝试使用StackFrame。它只能在调试模式下工作,这是应用程序速度的杀手。

    在发布模式下无法获取此信息,应考虑更改设计并添加参数。