呼び出し元情報

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

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

属性 説明 種類
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」など)。
Attribute コンストラクター 属性が適用されるメンバーの名前。 属性がメンバー内の要素 (パラメーター、戻り値、ジェネリック型パラメーターなど) である場合、この結果は、その要素に関連付けられているメンバーの名前になります。
含んでいないメンバー (型に適用されているアセンブリ レベルや属性など) 省略可能なパラメーターの既定値。

関連項目