2009-04-03 4 views
8

다음 예제를 참조하십시오.VB.NET에서 참조하는 메서드를 가져올 수 있습니까?

''//file1.vb 
Sub Something() 
    ''//... 
    Functions.LogInfo("some text") 
    ''//... 
End Sub 

''//functions.vb 
Sub LogInfo(ByVal entry as String) 

    Console.WriteLine(entry) 

End Sub 

LogInfo에서 "Something"이라는 이름을 얻을 수 있습니까?

이 게시물의 간략한 설명에 대해 유감스럽게도이 질문을 올바르게 표현하는 방법을 모르겠습니다. 나는 필요한만큼 명확히하고 정교 할 것이다.

답변

12

(편집 : 자체 StackTrace의 제거 불필요한 사용 - 당신은 단지 하나의 프레임보다 더 많은 정보를 출력하고자한다면 도움이 될 것입니다.) (IIRC)을

당신은 StackFrame 클래스를 사용할 수 있지만 꽤 비싸 인라인으로 인해 약간 부정확 할 수 있습니다.

편집 : 이런 식으로 뭔가가 :

Imports System.Diagnostics 
Imports System.Runtime.CompilerServices 

Public Class Test 

    Shared Sub Main() 
     Something() 
    End Sub   

    <MethodImpl(MethodImplOptions.NoInlining)> _ 
    Shared Sub Something()   
     Functions.LogInfo("some text") 
    End Sub 

End Class 

Public Class Functions 

    <MethodImpl(MethodImplOptions.NoInlining)> _ 
    Public Shared Sub LogInfo (ByVal entry as String) 
     Dim frame as StackFrame = new StackFrame(1, False) 
     Console.WriteLine("{0}: {1}", _ 
          frame.GetMethod.Name, _ 
          entry) 
    End Sub 

End Class 
+0

Downvoters의 묘리를 터득하는 것이 더 쉽습니다되지 않을 수도 있습니다 : 특별한 이유는? –

6

How can I find the method that called the current method?를 살펴 보자합니다 (NoInlining는 ... 확실히 제대로 작동하는 것입니다).

는 VB (희망)로 번역 :

Imports System.Diagnostics 
''// get call stack 
Dim stackTrace As New StackTrace() 

''// get calling method name 
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name) 
+0

내가 필요로했던 것에 감사하는 것은 감사한다. 왜 그 게시물은 내 검색에 오지 않았다 궁금하다 ... – Anders

+0

내가 전에 그것을 보았 기 때문에 내가 그것을 발견 할 수 있었던 유일한 이유는, 나는 StackTrace와 GetFrame이 나타나야 만 찾을 수 밖에 없었다. 올바른 프레임을 얻으려는 것에 대한 Jon의 조언을 권하고 싶습니다. 그는 .NET 전문가 IMO입니다. –

+0

전체 스택을 복제하는 것보다 필요한 스택 프레임의 인스턴스 만 만들면됩니다. –

1

당신은 StackFrame을 또는 스택 트레이스를 사용할 수 있습니다. 하지만 인라이닝으로 인해 릴리스 빌드에서 디버거에서 실행되는 것과는 동작이 다를 수 있습니다.

C# .NET을 : 그래서 결과는 기대하지 수 있습니다

System.Diagnostics.StackFrame sf = new StackFrame(1); 
sf.GetMethod().Name; 

VB :

Dim sf as new StackFrame(1) 
sf.GetMethod().Name 

편집

당신이 vb.net을 요청 깨달았 죄송합니다. 나는 내 대답을 편집하지만 VB에서 구문은 바로

1

System.Reflection.MethodBase.GetCurrentMethod.Name이 같은 일을 겉으로

관련 문제