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