C# 面试题 目录

C# 中 Caller Information 特性的用法 (如:CallerMemberName)

推荐答案

-- -------------------- ---- -------
----- -------
----- --------------------------------

------ ----- -----------------
-
    ------ ------ ---- ---------------
        ------------------ ------ ---------- - ---
        ---------------- ------ -------- - ---
        ------------------ --- ---------- - --
    -
        ------------------------- ------ ----- - - ------------
        ------------------------- ---- ----- - - ----------
        ------------------------- ---- ------- - - ------------
    -

    ------ ------ ---- ------
    -
        -----------------
    -
-

本题详细解读

Caller Information 特性概述

C# 中的 Caller Information 特性允许开发者在编译时获取调用者的信息,如调用者的方法名、文件路径和行号。这些特性是通过在方法的参数上应用 [CallerMemberName][CallerFilePath][CallerLineNumber] 属性来实现的。

特性详解

  1. [CallerMemberName]
    该特性用于获取调用当前方法的成员名称。通常用于日志记录、调试或实现某些依赖调用者名称的功能。

  2. [CallerFilePath]
    该特性用于获取调用当前方法的源文件路径。这在调试时非常有用,可以快速定位到调用代码的位置。

  3. [CallerLineNumber]
    该特性用于获取调用当前方法的代码行号。结合 [CallerFilePath],可以精确定位到调用代码的具体位置。

使用场景

  • 日志记录:在日志中记录调用者的方法名、文件路径和行号,便于调试和追踪问题。
  • 属性更改通知:在实现 INotifyPropertyChanged 接口时,使用 [CallerMemberName] 可以避免硬编码属性名称。
  • 调试信息:在调试时,自动获取调用者的信息,减少手动输入的工作量。

注意事项

  • Caller Information 特性只能在可选参数上使用,且参数必须提供默认值。
  • 这些特性在编译时由编译器填充,因此在运行时不会影响性能。
  • 如果调用者信息无法获取(例如在动态调用或反射调用时),编译器会使用参数的默认值。
纠错
反馈