次の方法で共有


呼び出し元情報

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

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

こちらも参照ください