2007年6月21日木曜日

[VB2005] メソッド名を取得する

トレースログなんかで、自メソッドを呼んだのは誰?なんて事を知りたいときが良くあります。
そんなときに使えそうな処理がわかりました。
クラス名とメソッド名が取得されます。

これから、Reflection関係を勉強してみたいです。

---------------------------
  1. Dim st As StackTrace = New StackTrace(False)  
  2. Dim sf As StackFrame  
  3. Dim mb As System.Reflection.MethodBase  
  4.   
  5. Dim sf0 As StackFrame = st.GetFrame(0)  
  6. Dim mb0 As System.Reflection.MethodBase = sf0.GetMethod()  
  7.   
  8. Dim stackLoop As Int32 = 1  
  9.   
  10. Dim className As String = String.Empty  
  11. Dim methodName As String = String.Empty  
  12. Do  
  13.   
  14.     sf = st.GetFrame(stackLoop)  
  15.     mb = sf.GetMethod()  
  16.   
  17.     If (mb.ReflectedType.Name = mb0.ReflectedType.Name) Then  
  18.         stackLoop += 1  
  19.     Else  
  20.         className = mb.ReflectedType.FullName  
  21.         methodName = mb.Name  
  22.         Exit Do  
  23.     End If  
  24.     'まぁ50も見とけば良いでしょう  
  25.     If (50 < stackLoop) Then  
  26.         Exit Do  
  27.     End If  
  28. Loop  

0 件のコメント: