呼び出し元情報 (C# および Visual Basic)
呼び出し元のツール ヒントの属性を使用して、メソッドに呼び出し元に関する情報を取得できます。ソース・コードのソース・コード、行番号、および呼び出し元のメンバー名のファイル パスを取得できます。この情報は、診断ツールをトレース、デバッグ、作成する場合に便利です。
この情報を取得するには、各に既定値がある、省略可能なパラメーターに適用されている属性を使用します。次の表は System.Runtime.CompilerServices の名前空間に定義されている呼び出し元のツール ヒントの属性を示します:
属性 |
Description |
種類 |
呼び出し元を含むソース ファイルの完全パス。これは、コンパイル時にファイル パスです。 |
String |
|
メソッドが呼び出されるソース ファイルの行番号。 |
Integer |
|
呼び出し元のメソッドまたはプロパティの名前。この 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 のプロパティの結果とは異なり、結果は難読化による影響を受けません。
メンバー名
呼び出されたメソッドで String の引数としてメンバー名を指定しないように CallerMemberName の属性を使用します。この手法を使用して、 名前の変更リファクタリング が String 値を変更しない問題を回避できます。この利点は次のタスクで特に便利です:
トレース診断ルーチンを使用します。
INotifyPropertyChanged インターフェイスを実装するときのデータのバインド。このインターフェイスは、コントロールが更新情報を表示できるためのプロパティが変更され、オブジェクトのプロパティをバインド コントロールに通知するようにします。CallerMemberName の属性がない場合、リテラルとしてプロパティ名を指定します。
次のグラフは CallerMemberName の属性を使用したときに返すメンバー名を示します。
呼び出し中に発生します |
メンバー名の結果 |
---|---|
メソッド、プロパティ、またはイベント |
メソッドの名前、プロパティ、またはイベントが発生した呼び出し。 |
コンストラクター |
文字列 「.ctor」 |
静的コンストラクター |
文字列 「.cctor」 |
デストラクター |
文字列は 「終了」できます。 |
ユーザー定義演算子または変換 |
メンバーの生成された名前 (「」 op_Addition。 |
属性コンストラクター |
属性が適用されるメンバーの名前。属性がメンバー内の要素 (パラメーター、戻り値、またはジェネリック型パラメーターなど)である場合、この結果はその要素に関連付けられているメンバーの名前です。 |
含むメンバーはありません (たとえば、型に適用される属性またはアセンブリ レベル) |
省略可能なパラメーターの既定値。 |
参照
関連項目
概念
名前付き引数と省略可能な引数 (C# プログラミング ガイド)