调用方信息

通过使用调用方信息属性,可以获取有关方法调用方的信息。 可以获取源代码的文件路径、源代码中的行号和调用方的成员名称。 此信息有助于跟踪、调试和创建诊断工具。

若要获取此信息,请使用应用于可选参数的属性,每个参数都具有默认值。 下表列出了 System.Runtime.CompilerServices 命名空间中定义的调用方信息属性:

特征 DESCRIPTION 类型
CallerFilePath 包含调用方的源文件的完整路径。 这是编译时的文件路径。 String
CallerLineNumber 调用方法的源文件中的行号。 Integer
CallerMemberName 调用方的方法或属性名称。 请参阅本主题后面的“成员名称”部分。 String

示例:

以下示例演示如何使用这些属性跟踪调用方。

open System.Diagnostics
open System.Runtime.CompilerServices
open System.Runtime.InteropServices

type Tracer() =
    member _.DoTrace(message: string,
                      [<CallerMemberName; Optional; DefaultParameterValue("")>] memberName: string,
                      [<CallerFilePath; Optional; DefaultParameterValue("")>] path: string,
                      [<CallerLineNumber; Optional; DefaultParameterValue(0)>] line: int) =
        Trace.WriteLine(sprintf $"Message: {message}")
        Trace.WriteLine(sprintf $"Member name: {memberName}")
        Trace.WriteLine(sprintf $"Source file path: {path}")
        Trace.WriteLine(sprintf $"Source line number: {line}")

注解

调用方信息属性只能应用于可选参数。 调用方信息属性会导致编译器为使用调用方信息属性修饰的每个可选参数编写正确的值。

调用方信息值在编译时作为文本发送到中间语言(IL)。 与 异常的 StackTrace 属性的结果不同,结果不受模糊处理的影响。

可以显式提供可选参数来控制调用方信息或隐藏调用方信息。

成员名称

可以使用特性 CallerMemberName 来避免将成员名称指定为 String 所调用方法的参数。 使用此方法可以避免重命名重构不会更改 String 值的问题。 此权益对于以下任务特别有用:

  • 使用跟踪和诊断例程。
  • 绑定数据时实现 INotifyPropertyChanged 接口。 此接口允许对象的属性通知绑定控件属性已更改,以便控件可以显示更新的信息。 如果没有属性 CallerMemberName ,则必须将属性名称指定为文本。

下图显示了使用 CallerMemberName 属性时返回的成员名称。

调用发生中 成员名称结果
方法、属性或事件 调用源自的方法、属性或事件的名称。
构造函数 字符串“.ctor”
静态构造函数 字符串“.cctor”
破坏者 字符串“Finalize”
用户定义的运算符或转换 为成员生成的名称,例如,“op_Addition”。
特性构造函数 应用特性的成员的名称。 如果特性是成员中的任何元素(如参数、返回值或泛型类型参数),则结果是与该元素关联的成员的名称。
无包含的成员(例如,程序集级别或应用于类型的特性) 可选参数的默认值。

另请参阅