INotifyPropertyChanged 接口 CallerMemberName属性
調(diào)用方信息
使用調(diào)用方信息屬性,可以獲取關(guān)于調(diào)用方的信息傳遞給方法。?可以獲取源代碼、行號(hào)在源代碼和調(diào)用方的成員名稱的文件路徑。?此信息用于跟蹤,調(diào)試和創(chuàng)建診斷工具非常有用。若要獲取此信息,則使用適用于可選參數(shù),每個(gè)都有一個(gè)默認(rèn)的屬性。?下表列出了?System.Runtime.CompilerServices?命名空間中定義的調(diào)用方信息屬性:
?| 特性 | 說(shuō)明 | 類型 |
| CallerFilePathAttribute | 包含調(diào)用方源文件的完整路徑。?這是文件路徑在編譯時(shí)。 | String |
| CallerLineNumberAttribute | 在調(diào)用方法的源文件中的行號(hào)。 | Integer |
| CallerMemberNameAttribute | 方法或調(diào)用方的屬性名稱。?請(qǐng)參見(jiàn)?Member Names?本主題后面 | String |
下面的示例演示如何使用調(diào)用方信息屬性。?在每次調(diào)用?TraceMessage?方法,信息將替換為可選參數(shù)的參數(shù)的調(diào)用方。
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:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs 24 // source line number: 31 ? 備注 ? 必須為每個(gè)可選參數(shù)指定一個(gè)顯式默認(rèn)值。?不能將調(diào)用方信息特性應(yīng)用于未指定為選項(xiàng)的參數(shù)。調(diào)用方信息屬性不會(huì)使一個(gè)參數(shù)選項(xiàng)。?相反,它們影響傳遞的默認(rèn)值,當(dāng)參數(shù)省略時(shí)。
調(diào)用方信息值發(fā)出為文本到在編譯時(shí)計(jì)算的 (IL)中間語(yǔ)言。?不同?StackTrace?屬性的結(jié)果異常的,結(jié)果不影響的經(jīng)過(guò)模糊處理的。
?
成員名稱可以使用?CallerMemberName?屬性設(shè)置為來(lái)避免指定成員名稱作為參數(shù)?String?到調(diào)用的方法。?通過(guò)使用這種方法,可以避免此問(wèn)題?重命名重構(gòu)?不更改?String?值。?此優(yōu)勢(shì)為以下任務(wù)特別有用:
-
使用跟蹤和診斷實(shí)例。
-
實(shí)現(xiàn)?INotifyPropertyChanged?接口,在綁定數(shù)據(jù)時(shí)。?此接口允許對(duì)象的屬性通知一個(gè)綁定控件屬性已更改,因此,該控件可顯示最新信息。?不?CallerMemberName?屬性,必須指定屬性名稱為文本。
以下圖表顯示返回的成員名稱,當(dāng)您使用?CallerMemberName?屬性。
?| 方法、屬性或事件 | 方法的名稱,該屬性,或者的事件調(diào)用為。 |
| 構(gòu)造函數(shù) | 字符串 “.ctor” |
| 靜態(tài)構(gòu)造函數(shù) | 字符串 “.cctor” |
| 析構(gòu)函數(shù) | 該字符串 “Finalize” |
| 用戶定義的運(yùn)算符或轉(zhuǎn)換 | 生成的名稱成員,例如, “op_Addition”。 |
| 特性構(gòu)造函數(shù) | 特性所應(yīng)用的成員的名稱。?如果屬性是在成員中的任何元素 (如參數(shù)、返回值或泛型類型參數(shù)),此結(jié)果是與組件關(guān)聯(lián)的成員的名稱。 |
| 不包含的成員 (例如,程序集級(jí)別或特性應(yīng)用于型) | 可選參數(shù)的默認(rèn)值。 |
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/SavionZhang/p/5701563.html
總結(jié)
以上是生活随笔為你收集整理的INotifyPropertyChanged 接口 CallerMemberName属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 09_Mybatis开发Dao方法——m
- 下一篇: OSI模型和TCP/IP模型