C# 特性學習之一、CallerMemberName、CallerFilePath和CallerLineNumber

來源:互聯網
上載者:User

標籤:ber   path   href   fan   code   名稱   pre   cto   建構函式   

在開發中經常會寫個公有靜態類記錄日誌,如下:

    /// <summary>        /// Writes the error.        /// </summary>        /// <param name="message">The message to be written.</param>        public void WriteError(object message)        {            _log4Net.Error(message);        }

如果想區分調用來源就比較麻煩了。在.Net 4.5中引入了三個Attribute:CallerMemberName、CallerFilePath和CallerLineNumber 。在編譯器的配合下,分別可以擷取到調用函數(準確講應該是成員)名稱,調用檔案及調用行號。這時可以把方法改成:

      /// <summary>        /// Writes an error level logging message.        /// </summary>        /// <param name="message">The message to be written.</param>        public void WriteError(object message,        [CallerMemberName] string memberName = "",        [CallerFilePath] string sourceFilePath = "",        [CallerLineNumber] int sourceLineNumber = 0)        {            _log4Net.ErrorFormat("檔案:{0} 行號:{1} 方法名:{2},訊息:{3}", sourceFilePath, sourceLineNumber, memberName, message);        }

這樣就可以區分調用來源了。另外,在建構函式,解構函式、屬性等特殊的地方調用CallerMemberName屬性所標記的函數時,擷取的值有所不同,其取值如下表所示:

調用的地方

CallerMemberName擷取的結果

方法、屬性或事件

方法,屬性或事件的名稱

建構函式

字串 ".ctor"

靜態建構函式

字串 ".cctor"

解構函式

該字串 "Finalize"

使用者定義的運算子或轉換

產生的名稱成員,例如, "op_Addition"。

特性建構函式

特性所應用的成員的名稱

 

參考連結:

使用CallerMemberName簡化InotifyPropertyChanged的實現

C# 5.0中新增特性

C# 特性學習之一、CallerMemberName、CallerFilePath和CallerLineNumber

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.