Другой подход заключается в использовании Атрибут имени участника вызывающего абонента * 1002. * из среды выполнения. Пространство имен служб компилятора для заполнения необязательного параметра. Например ...
Private Function GetMethodName(<System.Runtime.CompilerServices.CallerMemberName>
Optional memberName As String = Nothing) As String
Return memberName
End Function
Функция будет вызываться так, как вы ожидаете ...
Public Sub DoSomeWork()
Dim methodName As String = GetMethodName()
Console.WriteLine($"Entered {methodName}")
' Do some work
End Sub
Вместо того, чтобы «просто» получать имя метода, функция также может использовать имя метода, полученное для дальнейшего упрощения кода. Например ...
Private Sub TraceEnter(
<System.Runtime.CompilerServices.CallerMemberName>
Optional memberName As String = Nothing)
Console.WriteLine($"Entered {memberName}")
End Sub
... который может быть использован следующим образом ...
Public Sub DoSomeWork()
TraceEnter()
' Do some work
End Sub
Другие атрибуты в пространстве имен CompilerServices могут использоваться аналогичным образом для получения полного пути (во время компиляции) исходного файла и / или номера строки вызова. См. Документацию CallerMemberNameAttribute для примера кода.