获取调用方法的名称

时间:2009-09-14 11:29:32

标签: vb.net reflection

基本上我有一个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

我在日志记录方法中调用

getmethod.name.tostring返回日志记录方法的名称

getmethod.declaringtype.fullname返回日志记录类的名称

无论我做什么,我都找不到获取调用日志记录方法的方法名称的方法“tstmethod”

7 个答案:

答案 0 :(得分:12)

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

Dim stackframe As New Diagnostics.StackFrame(1)

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

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

答案 1 :(得分:8)

我认为上述陈述可以分为一行:

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

这将显示一个消息框,与调用方法名称一样。

答案 2 :(得分:4)

VB.Net

System.Reflection.MethodBase.GetCurrentMethod.Name()

答案 3 :(得分:0)

你应该能够从StackFrame中获取这个,并且构造函数告诉它链上有多少帧,因此获取父级将使用1(帧为零,因此0是当前方法):< / p>

Dim stackTrace as New Diagnostics.StackFrame(1)
Return stackTrace.GetMethod.Name

答案 4 :(得分:0)

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

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

记得添加名称空间诊断

答案 5 :(得分:0)

我将调用表单添加为所有子例程和函数的第一个参数 像被叫函数(我,para1,para2 ......)这样我就可以识别调用表单并在被调用的例程中使用它的名字或文本

答案 6 :(得分:-2)

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

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