获取调用方法的名称

问题描述 投票:0回答:8

基本上我有一个网络服务,我正在尝试将某种使用情况登录进去。 为此,我创建了一个带有日志记录方法的类。 我在服务上实例化该类,然后在每个 Web 方法中调用日志记录方法。

我正在尝试找到一种方法来获取调用 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”

vb.net reflection
8个回答
13
投票

您需要使用适当的构造函数实例化

StackFrame
。例如,

Dim stackframe As New Diagnostics.StackFrame(1)

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

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


12
投票

我觉得上面这句话可以写成一行:

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

这将显示一个消息框,其中包含调用方法名称。


4
投票

VB.Net

System.Reflection.MethodBase.GetCurrentMethod.Name()

0
投票

你应该能够从 StackFrame 中获取它,构造函数告诉它有多少帧要沿着链向上移动,因此获取父级将使用 1 (帧是从零开始的,所以 0 是当前方法):

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

0
投票

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

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


0
投票

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


0
投票

你可以这样做:

Imports System.Runtime.CompilerServices

    Private Sub LogError(message As String, <CallerMemberName> Optional caller As String = null)
'Logging logic here using caller
    End Sub

-1
投票

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

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

记得添加命名空间Diagnostics

© www.soinside.com 2019 - 2024. All rights reserved.