C#5.0新增功能02 調用方信息

  經過使用調用方信息特性,可獲取有關方法的調用方的信息。 能夠獲取源代碼的文件路徑、源代碼中的行號和調用方的成員名稱。 此信息有助於跟蹤、調試和建立診斷工具。若要獲取此信息,能夠使用應用於可選參數的特性,每一個特性都具備默認值。 下表列出在 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」。
特性構造函數 要應用特性的方法或屬性的名稱。 若是該特性是成員中的任何元素(如參數、返回值或泛型參數),則此結果是與該元素關聯的成員的名稱。
無包含的成員(例如,程序集級別或應用於類型的特性) 可選參數的默認值。
 
相關文章
相關標籤/搜索