本文講述VB.NET(VB 2008, VB 2005) 如何得到調用當前過程的方法名稱(Calling method)和類(Calling Class) 的名稱。
主要用到 System.Diagnostics.StackTrace 和 System.Diagnostics.StackFrame,以及 StackFrame的方法:GetFileName,GetFileLineNumber,GetMethod.Name, GetMethod.ReflectedType.Name。
範例程式碼
如下面範例程式碼所示,我們有兩個類:Class1 和 Class2 ,Class1 的有一個方法(method)叫 LoadXmlFile調用 Class2 的 WriteToFile 方法。
Imports System.XmlPublic Class Class1 Public Sub LoadXmlFile() Dim filePath As String = "C:a.xml" Dim xdoc As New Xml.XmlDocument Try
xdoc.Load(filePath)
Catch ex As Exception
Dim log As New Class2
log.WriteToFile("Error. Load XML File failed")
End Try End Sub End Class
Imports System.DiagnosticsPublic Class Class2 Public Sub WriteToFile(ByVal Log As String) Dim clsName As String = "" Dim mtdName As String = ""
Dim lnNo As String = ""
Dim codeFilePath As String = "" Dim st As New StackTrace(True)
If st.FrameCount > 1 Then
Dim sf As StackFrame = st.GetFrame(1)
mtdName = sf.GetMethod.Name
Debug.WriteLine(mtdName) clsName = sf.GetMethod.ReflectedType.Name
Debug.WriteLine(clsName) lnNo = sf.GetFileLineNumber.ToString
Debug.WriteLine(lnNo) codeFilePath = sf.GetFileName
Debug.WriteLine(codeFilePath)
End If End Sub End Class
在 Class2裡面,我們寫了一些代碼得到調用它的 Class1的名稱,所在檔案路徑,調用方法的名稱,以及調用檔案裡執行調用的行數。
要點
1. 要 Imports System.Diagnostics。
2. 要用到 StackTrace (System.Diagnostics.StackTrace) 和 StackFrame (System.Diagnostics.StackFrame)。
3. 要用到 StackTrace.GetFrame(1)。
4. StackFrame.GetMethod.Name 得到調用當前過程的方法 (calling method name)。
5. StackFrame.GetMethod.ReflectedType.Name 得到調用當前過程的類的名稱 (calling class name)。
6. StackFrame.GetFileLineNumber.ToString 得到調用當前過程的語句在檔案裡的行數。
7. StackFrame.GetFileName 得到調用當前過程的檔案路徑。