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


  通過使用調用方信息特性,可獲取有關方法的調用方的信息。 可以獲取源代碼的文件路徑、源代碼中的行號和調用方的成員名稱。 此信息有助於跟蹤、調試和創建診斷工具。若要獲取此信息,可以使用應用於可選參數的特性,每個特性都具有默認值。 下表列出在 System.Runtime.CompilerServices 命名空間中定義的調用方信息特性:

特性 描述 類型
CallerFilePathAttribute 包含調用方的源文件的完整路徑。 這是編譯時的文件路徑。 String
CallerLineNumberAttribute 源文件中調用方法的行號。 Integer
CallerMemberNameAttribute 調用方的方法或屬性名稱。 請參閱本主題后面的成員名稱 String

示例

下面的示例演示如何使用調用方信息特性。 每次調用 TraceMessage 方法時,調用方信息將替換為可選參數的變量。

 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

備注

你必須為每個可選參數指定顯式默認值。 不能將調用方信息特性應用於未指定為可選的參數。

調用方信息特性不會使參數成為可選參數。 相反,它們會在忽略此參數時影響傳入的默認值。

在編譯時,調用方信息值將作為文本傳入中間語言 (IL)。 與異常的 StackTrace 屬性的結果不同,這些結果不受模糊處理的影響。

你可顯式提供可選參數來控制調用方信息或隱藏調用方信息。

成員名稱

可以使用 CallerMemberName 特性來避免將成員名稱指定為所調用的方法的 String 參數。 通過使用這種技術,可以避免“重命名重構”不更改 String 值的問題。 此好處對於以下任務特別有用:

  • 使用跟蹤和診斷例程。

  • 在綁定數據時實現 INotifyPropertyChanged 接口。 此接口允許對象的屬性通知綁定控件該屬性已更改,以便此控件能夠顯示更新的信息。 如果沒有 CallerMemberName 特性,則必須將屬性名稱指定為文本。

以下圖表顯示在使用 CallerMemberName 特性時返回的成員名稱。

調用發生中 成員名稱結果
方法、屬性或事件 從中發起調用的方法、屬性或事件的名稱。
構造函數 字符串“.ctor”
靜態構造函數 字符串“.cctor”
析構函數 字符串“Finalize”
用戶定義的運算符或轉換 為成員生成的名稱,例如,“op_Addition”。
特性構造函數 要應用特性的方法或屬性的名稱。 如果該特性是成員中的任何元素(如參數、返回值或泛型參數),則此結果是與該元素關聯的成員的名稱。
無包含的成員(例如,程序集級別或應用於類型的特性) 可選參數的默認值。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM