INotifyPropertyChanged 介面 CallerMemberName屬性
- 2019 年 10 月 4 日
- 筆記
調用方資訊
使用調用方資訊屬性,可以獲取關於調用方的資訊傳遞給方法。 可以獲取源程式碼、行號在源程式碼和調用方的成員名稱的文件路徑。 此資訊用於跟蹤,調試和創建診斷工具非常有用。若要獲取此資訊,則使用適用於可選參數,每個都有一個默認的屬性。 下表列出了 System.Runtime.CompilerServices 命名空間中定義的調用方資訊屬性:
特性 | 說明 | 類型 |
|---|---|---|
CallerFilePathAttribute | 包含調用方源文件的完整路徑。 這是文件路徑在編譯時。 | String |
CallerLineNumberAttribute | 在調用方法的源文件中的行號。 | Integer |
CallerMemberNameAttribute | 方法或調用方的屬性名稱。 請參見 Member Names 本主題後面 | String |
下面的示例演示如何使用調用方資訊屬性。 在每次調用 TraceMessage 方法,資訊將替換為可選參數的參數的調用方。
1 // using System.Runtime.CompilerServices 2 // using System.Diagnostics; 3 4 public void DoProcessing() 5 { 6 TraceMessage("Something happened."); 7 } 8 9 public void TraceMessage(string message, 10 [CallerMemberName] string memberName = "", 11 [CallerFilePath] string sourceFilePath = "", 12 [CallerLineNumber] int sourceLineNumber = 0) 13 { 14 Trace.WriteLine("message: " + message); 15 Trace.WriteLine("member name: " + memberName); 16 Trace.WriteLine("source file path: " + sourceFilePath); 17 Trace.WriteLine("source line number: " + sourceLineNumber); 18 } 19 20 // Sample Output: 21 // message: Something happened. 22 // member name: DoProcessing 23 // source file path: c:UsersusernameDocumentsVisual Studio 2012ProjectsCallerInfoCSCallerInfoCSForm1.cs 24 // source line number: 31必須為每個可選參數指定一個顯式默認值。 不能將調用方資訊特性應用於未指定為選項的參數。
調用方資訊屬性不會使一個參數選項。 相反,它們影響傳遞的默認值,當參數省略時。
調用方資訊值發出為文本到在編譯時計算的 (IL)中間語言。 不同 StackTrace 屬性的結果異常的,結果不影響的經過模糊處理的。
成員名稱
可以使用 CallerMemberName 屬性設置為來避免指定成員名稱作為參數 String 到調用的方法。 通過使用這種方法,可以避免此問題 重命名重構 不更改 String 值。 此優勢為以下任務特別有用:
- 使用跟蹤和診斷實例。
- 實現 INotifyPropertyChanged 介面,在綁定數據時。 此介面允許對象的屬性通知一個綁定控制項屬性已更改,因此,該控制項可顯示最新資訊。 不 CallerMemberName 屬性,必須指定屬性名稱為文本。
以下圖表顯示返回的成員名稱,當您使用 CallerMemberName 屬性。
調用發生中 | 成員名稱結果 |
|---|---|
方法、屬性或事件 | 方法的名稱,該屬性,或者的事件調用為。 |
構造函數 | 字元串 「.ctor」 |
靜態構造函數 | 字元串 「.cctor」 |
析構函數 | 該字元串 「Finalize」 |
用戶定義的運算符或轉換 | 生成的名稱成員,例如, 「op_Addition」。 |
特性構造函數 | 特性所應用的成員的名稱。 如果屬性是在成員中的任何元素 (如參數、返回值或泛型類型參數),此結果是與組件關聯的成員的名稱。 |
不包含的成員 (例如,程式集級別或特性應用於型) | 可選參數的默認值。 |