共用方式為


呼叫端資訊 (C# 和 Visual Basic)

使用Caller Info的資訊屬性,您可以取得呼叫端的資訊加入至方法。 您可以從原始程式碼行號、原始程式碼和呼叫端的成員名稱的檔案路徑。 這項資訊來追蹤,以及建立診斷工具非常有用。

若要取得這項資訊,您會使用套用至可選擇參數的屬性,每個屬性都有預設值。 下表列出定義在 System.Runtime.CompilerServices 命名空間中的呼叫端資訊屬性:

屬性

描述

型別

[ T:System.Runtime.CompilerServices.CallerFilePathAttribute ]

包含呼叫端原始程式檔的完整路徑。 這是在編譯時期的檔案路徑。

String

[ T:System.Runtime.CompilerServices.CallerLineNumberAttribute ]

方法被呼叫時原始程式檔的行號。

Integer

[ T:System.Runtime.CompilerServices.CallerMemberNameAttribute ]

方法或呼叫端的屬性名稱。 請參閱本主題稍後的討論內容 成員名稱。

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

備註

您必須為每個選擇性參數指定明確的預設值。 您無法將呼叫端資訊屬性套用至未指定為選擇性的參數。

呼叫端資訊屬性無法讓一個參數成為選擇性。 相反地,它們會影響被傳入的預設值,當這個引數被略過時。

在編譯時期,呼叫端資訊值發出以常值的型別 Intermediate Language (IL)。 不同於 StackTrace 屬性所造成的例外狀況,其結果並不會被模糊化所影響。

Hh534540.collapse_all(zh-tw,VS.110).gif成員名稱

您可以使用 CallerMemberName 屬性來避免指定成員名稱做為 String 引數傳遞至呼叫的方法。 您可以使用這個技巧,可以避免 [重新命名重構。] 不會變更 String 值這個問題。 這項優點為下列工作特別有用 :

  • 使用追蹤和診斷行程。

  • 實作 INotifyPropertyChanged 介面,當繫結資料時。 這個介面允許物件的屬性告知繫結控制項的屬性已變更,所以控制項可以顯示更新資訊。 沒有 CallerMemberName 屬性,您必須指定屬性名稱為常值。

下圖顯示傳回的成員名稱,當您使用 CallerMemberName 屬性時。

內部發生呼叫

成員名稱結果

方法、屬性或事件。

方法的名稱,屬性,或產生此呼叫的事件。

建構函式

字串「.ctor」

靜態建構函式

字串「.cctor」

解構函式

字串「完成」

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

產生的名稱給成員,例如, 「op_Addition」。

屬性建構函式

屬性套用到成員的名稱。 如果屬性為成員內的任何項目 (例如參數、傳回值或泛型型別參數),結果是與該項目有關的成員名稱。

未包含的成員 (例如,組件層級或屬性套用至型別的話)。

設定參數的預設值。

請參閱

參考

屬性 (C# 和 Visual Basic)

概念

常見屬性 (C# 和 Visual Basic)

選擇性參數 (Visual Basic)

具名和選擇性引數 (C# 程式設計手冊)

其他資源

程式設計概念