呼び出し元情報 (C# および Visual Basic)

呼び出し元のツール ヒントの属性を使用して、メソッドに呼び出し元に関する情報を取得できます。ソース・コードのソース・コード、行番号、および呼び出し元のメンバー名のファイル パスを取得できます。この情報は、診断ツールをトレース、デバッグ、作成する場合に便利です。

この情報を取得するには、各に既定値がある、省略可能なパラメーターに適用されている属性を使用します。次の表は System.Runtime.CompilerServices の名前空間に定義されている呼び出し元のツール ヒントの属性を示します:

属性

Description

種類

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(ja-jp,VS.110).gifメンバー名

呼び出されたメソッドで String の引数としてメンバー名を指定しないように CallerMemberName の属性を使用します。この手法を使用して、 名前の変更リファクタリング が String 値を変更しない問題を回避できます。この利点は次のタスクで特に便利です:

  • トレース診断ルーチンを使用します。

  • INotifyPropertyChanged インターフェイスを実装するときのデータのバインド。このインターフェイスは、コントロールが更新情報を表示できるためのプロパティが変更され、オブジェクトのプロパティをバインド コントロールに通知するようにします。CallerMemberName の属性がない場合、リテラルとしてプロパティ名を指定します。

次のグラフは CallerMemberName の属性を使用したときに返すメンバー名を示します。

呼び出し中に発生します

メンバー名の結果

メソッド、プロパティ、またはイベント

メソッドの名前、プロパティ、またはイベントが発生した呼び出し。

コンストラクター

文字列 「.ctor」

静的コンストラクター

文字列 「.cctor」

デストラクター

文字列は 「終了」できます。

ユーザー定義演算子または変換

メンバーの生成された名前 (「」 op_Addition。

属性コンストラクター

属性が適用されるメンバーの名前。属性がメンバー内の要素 (パラメーター、戻り値、またはジェネリック型パラメーターなど)である場合、この結果はその要素に関連付けられているメンバーの名前です。

含むメンバーはありません (たとえば、型に適用される属性またはアセンブリ レベル)

省略可能なパラメーターの既定値。

参照

関連項目

属性 (C# および Visual Basic)

概念

共通の属性 (C# および Visual Basic)

省略可能なパラメーター (Visual Basic)

名前付き引数と省略可能な引数 (C# プログラミング ガイド)

その他の技術情報

プログラミングの概念