經過使用調用方信息特性,可獲取有關方法的調用方的信息。 能夠獲取源代碼的文件路徑、源代碼中的行號和調用方的成員名稱。 此信息有助於跟蹤、調試和建立診斷工具。若要獲取此信息,能夠使用應用於可選參數的特性,每一個特性都具備默認值。 下表列出在 System.Runtime.CompilerServices 命名空間中定義的調用方信息特性:html
特性 | 描述 | 類型 |
---|---|---|
CallerFilePathAttribute | 包含調用方的源文件的完整路徑。 這是編譯時的文件路徑。 | String |
CallerLineNumberAttribute | 源文件中調用方法的行號。 | Integer |
CallerMemberNameAttribute | 調用方的方法或屬性名稱。 請參閱本主題後面的成員名稱。 | String |
下面的示例演示如何使用調用方信息特性。 每次調用 TraceMessage
方法時,調用方信息將替換爲可選參數的變量。api
1 public void DoProcessing() 2 { 3 TraceMessage("Something happened."); 4 } 5 6 public void TraceMessage(string message, 7 [System.Runtime.CompilerServices.CallerMemberName] string memberName = "", 8 [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "", 9 [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0) 10 { 11 System.Diagnostics.Trace.WriteLine("message: " + message); 12 System.Diagnostics.Trace.WriteLine("member name: " + memberName); 13 System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath); 14 System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber); 15 } 16 17 // 輸出結果: 18 // message: Something happened. 19 // member name: DoProcessing 20 // source file path: c:\Visual Studio Projects\CallerInfoCS\CallerInfoCS\Form1.cs 21 // source line number: 31
你必須爲每一個可選參數指定顯式默認值。 不能將調用方信息特性應用於未指定爲可選的參數。app
調用方信息特性不會使參數成爲可選參數。 相反,它們會在忽略此參數時影響傳入的默認值。ide
在編譯時,調用方信息值將做爲文本傳入中間語言 (IL)。 與異常的 StackTrace 屬性的結果不一樣,這些結果不受模糊處理的影響。函數
你可顯式提供可選參數來控制調用方信息或隱藏調用方信息。工具
能夠使用 CallerMemberName
特性來避免將成員名稱指定爲所調用的方法的 String
參數。 經過使用這種技術,能夠避免「重命名重構」不更改 String
值的問題。 此好處對於如下任務特別有用:ui
使用跟蹤和診斷例程。spa
在綁定數據時實現 INotifyPropertyChanged 接口。 此接口容許對象的屬性通知綁定控件該屬性已更改,以便此控件可以顯示更新的信息。 若是沒有 CallerMemberName
特性,則必須將屬性名稱指定爲文本。調試
如下圖表顯示在使用 CallerMemberName
特性時返回的成員名稱。code
調用發生中 | 成員名稱結果 |
---|---|
方法、屬性或事件 | 從中發起調用的方法、屬性或事件的名稱。 |
構造函數 | 字符串「.ctor」 |
靜態構造函數 | 字符串「.cctor」 |
析構函數 | 字符串「Finalize」 |
用戶定義的運算符或轉換 | 爲成員生成的名稱,例如,「op_Addition」。 |
特性構造函數 | 要應用特性的方法或屬性的名稱。 若是該特性是成員中的任何元素(如參數、返回值或泛型參數),則此結果是與該元素關聯的成員的名稱。 |
無包含的成員(例如,程序集級別或應用於類型的特性) | 可選參數的默認值。 |