programing

현재 메서드의 이름을 가져옵니다.

padding 2023. 5. 8. 21:56
반응형

현재 메서드의 이름을 가져옵니다.

이것은 다소 어리석은 질문이지만, 그 방법 내에서 현재 실행되고 있는 방법의 이름을 얻을 수 있습니까?

Public Sub SomeMethod()

   Dim methodName as String = System.Reflection.[function to get the current method name here?]

End Sub

감사해요.

System.Reflection.MethodInfo.GetCurrentMethod();

다른 메소드는 요청된 것과 비슷하지만 문자열 값을 반환하지 않습니다.하지만 다음과 같은 이점이 있습니다.

Dim methodName$ = System.Reflection.MethodBase.GetCurrentMethod().Name

이 질문에 제시된 답변이 실제로 효과가 있는지 확인하기 위해 (System.Reflection.MethodBase.GetCurrentMethod().Name런타임에 속성을 추가해야 합니다.이 방법을 깨는 컴파일러/런타임 플래그는 없습니다.

이름을 가져오려는 함수가 표시되어야 합니다.

  • F#[<System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)>]
  • VB:<System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)>

  • C#:[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]

또한, 요즘에는 VB, C#(그리고 아마도 F#)에 연산자가 있는데, 당신의 경우에는 다음과 같습니다.nameof(SomeMethod)(여기서는 VB와 C#에 대한 구문이 동일할 것으로 생각합니다.)

또 다른 방법은 시스템에서 CallerMemberNameAttribute를 사용하는 것입니다.런타임.선택적 매개 변수를 채울 컴파일러 서비스 네임스페이스입니다.예를 들어...

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

컴파일러 서비스 네임스페이스의 다른 속성을 유사한 방식으로 사용하여 소스 파일의 전체 경로 및/또는 호출의 회선 번호를 검색할 수 있습니다.샘플 코드는 CallerMemberNameAttribute 설명서를 참조하십시오.

Dim methodName As String = System.Reflection.MethodBase.GetCurrentMethod().Name

언급URL : https://stackoverflow.com/questions/2051217/get-the-name-of-the-current-method

반응형