调用方信息(C# 和 Visual Basic)

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

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

特性

说明

类型

CallerFilePathAttribute

包含调用方源文件的完整路径。 这是文件路径在编译时。

String

CallerLineNumberAttribute

在调用方法的源文件中的行号。

Integer

CallerMemberNameAttribute

方法或调用方的属性名称。 请参见 Member Names 本主题后面

String

示例

下面的示例演示如何使用调用方信息属性。 在每次调用 TraceMessage 方法,信息将替换为可选参数的参数的调用方。

' Imports System.Runtime.CompilerServices
' Imports System.Diagnostics

Private Sub DoProcessing()
    TraceMessage("Something happened.")
End Sub

Public Sub TraceMessage(message As String,
        <CallerMemberName> Optional memberName As String = Nothing,
        <CallerFilePath> Optional sourcefilePath As String = Nothing,
        <CallerLineNumber()> Optional sourceLineNumber As Integer = 0)

    Trace.WriteLine("message: " & message)
    Trace.WriteLine("member name: " & memberName)
    Trace.WriteLine("source file path: " & sourcefilePath)
    Trace.WriteLine("source line number: " & sourceLineNumber)
End Sub

' Sample output:
'   message: Something happened.
'   member name: DoProcessing
'   source file path: C:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoVB\CallerInfoVB\Form1.vb
'   source line number: 15
// using System.Runtime.CompilerServices
// using System.Diagnostics;

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string sourceFilePath = "",
        [CallerLineNumber] int sourceLineNumber = 0)
{
    Trace.WriteLine("message: " + message);
    Trace.WriteLine("member name: " + memberName);
    Trace.WriteLine("source file path: " + sourceFilePath);
    Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31

备注

必须为每个可选参数指定一个显式默认值。 不能将调用方信息特性应用于未指定为选项的参数。

调用方信息属性不会使一个参数选项。 相反,它们影响传递的默认值,当参数省略时。

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

Hh534540.collapse_all(zh-cn,VS.110).gif成员名称

可以使用 CallerMemberName 属性设置为来避免指定成员名称作为参数 String 到调用的方法。 通过使用这种方法,可以避免此问题 重命名重构 不更改 String 值。 此优势为以下任务特别有用:

  • 使用跟踪和诊断实例。

  • 实现 INotifyPropertyChanged 接口,在绑定数据时。 此接口允许对象的属性通知一个绑定控件属性已更改,因此,该控件可显示最新信息。 不 CallerMemberName 属性,必须指定属性名称为文本。

以下图表显示返回的成员名称,当您使用 CallerMemberName 属性。

调用发生中

成员名称结果

方法、属性或事件

方法的名称,该属性,或者的事件调用为。

构造函数

字符串 “.ctor”

静态构造函数

字符串 “.cctor”

析构函数

该字符串 “完成”

用户定义的运算符或转换

生成的名称成员,例如, “op_Addition”。

特性构造函数

特性所应用的成员的名称。 如果属性是在成员中的任何元素 (如参数、返回值或泛型类型参数),此结果是与组件关联的成员的名称。

不包含的成员 (例如,程序集级别或特性应用于类型)

可选参数的默认值。

请参见

参考

特性(C# 和 Visual Basic)

概念

常用特性(C# 和 Visual Basic)

可选参数 (Visual Basic)

命名实参和可选实参(C# 编程指南)

其他资源

编程概念