呼び出し元情報
呼び出し元情報の属性を使用すると、メソッドへの呼び出し元に関する情報を取得できます。 ソース コードのファイル パス、ソース コードの行番号、および呼び出し元のメンバー名を取得できます。 この情報は、トレース、デバッグ、および診断ツールの作成に役立ちます。
この情報を取得するには、省略可能なパラメーターに適用される属性を使用します。各パラメーターには既定値があります。 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 コンストラクター | 属性が適用されるメンバーの名前。 属性がメンバー内の要素 (パラメーター、戻り値、ジェネリック型パラメーターなど) である場合、この結果は、その要素に関連付けられているメンバーの名前になります。 |
含んでいないメンバー (型に適用されているアセンブリ レベルや属性など) | 省略可能なパラメーターの既定値。 |
関連項目
.NET