呼び出し元情報 (C#)Caller Information (C#)

呼び出し元情報の属性を使用すると、メソッドへの呼び出し元に関する情報を取得できます。By using Caller Info attributes, you can obtain information about the caller to a method. ソース コードのファイル パス、ソース コードの行番号、および呼び出し元のメンバー名を取得できます。You can obtain file path of the source code, the line number in the source code, and the member name of the caller. この情報は、トレース、デバッグ、および診断ツールの作成に役立ちます。This information is helpful for tracing, debugging, and creating diagnostic tools.

この情報を取得するには、省略可能なパラメーターに適用される属性を使用します。各パラメーターには既定値があります。To obtain this information, you use attributes that are applied to optional parameters, each of which has a default value. 次の表は、System.Runtime.CompilerServices 名前空間で定義されている呼び出し元情報の属性の一覧です。The following table lists the Caller Info attributes that are defined in the System.Runtime.CompilerServices namespace:

属性Attribute 説明Description Type
CallerFilePathAttribute 呼び出し元を含むソース ファイルのフル パスです。Full path of the source file that contains the caller. これは、コンパイル時のファイル パスです。This is the file path at compile time. String
CallerLineNumberAttribute メソッドが呼び出されたソース ファイルの行番号。Line number in the source file at which the method is called. Integer
CallerMemberNameAttribute 呼び出し元のメソッド名またはプロパティ名。Method or property name of the caller. 後で説明する「メンバー名」を参照してください。See Member Names later in this topic. String

Example

呼び出し元情報の属性を使用する方法の例を次に示します。The following example shows how to use Caller Info attributes. TraceMessage メソッドを呼び出すたびに、呼び出し元情報は、省略可能なパラメーターの引数として設定されます。On each call to the TraceMessage method, the caller information is substituted as arguments to the optional parameters.

public void DoProcessing()  
{  
    TraceMessage("Something happened.");  
}  

public void TraceMessage(string message,  
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",  
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",  
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)  
{  
    System.Diagnostics.Trace.WriteLine("message: " + message);  
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);  
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);  
    System.Diagnostics.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  

解説Remarks

省略可能な各パラメーターには、明示的な既定値を指定する必要があります。You must specify an explicit default value for each optional parameter. 省略可能と指定されていないパラメーターには、呼び出し元情報の属性を適用できません。You can't apply Caller Info attributes to parameters that aren't specified as optional.

呼び出し元情報の属性によってパラメーターが省略可能になるわけではありません。The Caller Info attributes don't make a parameter optional. この属性は、引数を省略したときに渡される既定値に影響します。Instead, they affect the default value that's passed in when the argument is omitted.

呼び出し元情報の値は、コンパイル時に中間言語 (IL) 内にリテラルとして出力されます。Caller Info values are emitted as literals into the Intermediate Language (IL) at compile time. 例外の StackTrace プロパティの結果とは異なり、難読化による影響は受けません。Unlike the results of the StackTrace property for exceptions, the results aren't affected by obfuscation.

省略可能な引数を明示的に指定して、呼び出し元情報を制御したり、非表示にしたりできます。You can explicitly supply the optional arguments to control the caller information or to hide caller information.

メンバー名Member Names

CallerMemberName 属性を使用して、呼び出されたメソッドにメンバー名を String 引数として指定することを回避できます。You can use the CallerMemberName attribute to avoid specifying the member name as a String argument to the called method. この方法を使用すると、リファクタリングの名前の変更String 値が変更されないという問題が発生しなくなります。By using this technique, you avoid the problem that Rename Refactoring doesn't change the String values. この利点は、次のタスクで役立ちます。This benefit is especially useful for the following tasks:

  • トレース ルーチンと診断ルーチンの使用。Using tracing and diagnostic routines.

  • データ バインディング時の INotifyPropertyChanged インターフェイスの実装。Implementing the INotifyPropertyChanged interface when binding data. このインターフェイスを使用すると、オブジェクトのプロパティが、プロパティが変更されたことをデータ バインド コントロールに通知できます。これによって、このコントロールは、更新された情報を表示できます。This interface allows the property of an object to notify a bound control that the property has changed, so that the control can display the updated information. CallerMemberName 属性がない場合は、リテラルとしてプロパティ名を指定する必要があります。Without the CallerMemberName attribute, you must specify the property name as a literal.

次のグラフは、CallerMemberName 属性の使用時に返されるメンバー名を示します。The following chart shows the member names that are returned when you use the CallerMemberName attribute.

呼び出しは、次のものの中で発生します。Calls occurs within メンバー名の結果Member name result
メソッド、プロパティ、またはイベントMethod, property, or event 呼び出しが発生したメソッド、プロパティ、またはイベントの名前。The name of the method, property, or event from which the call originated.
コンストラクターConstructor 文字列「.ctor」The string ".ctor"
静的コンストラクターStatic constructor 文字列「.cctor」The string ".cctor"
デストラクターです。Destructor 文字列「Finalize」The string "Finalize"
ユーザー定義の演算子または変換User-defined operators or conversions 生成されたメンバー名 (「op_Addition」など)。The generated name for the member, for example, "op_Addition".
Attribute コンストラクターAttribute constructor 属性が適用されるメンバーの名前。The name of the member to which the attribute is applied. 属性がメンバー内の要素 (パラメーター、戻り値、ジェネリック型パラメーターなど) である場合、この結果は、その要素に関連付けられているメンバーの名前になります。If the attribute is any element within a member (such as a parameter, a return value, or a generic type parameter), this result is the name of the member that's associated with that element.
含んでいないメンバー (型に適用されているアセンブリ レベルや属性など)No containing member (for example, assembly-level or attributes that are applied to types) 省略可能なパラメーターの既定値。The default value of the optional parameter.

関連項目See Also

属性 (C#)Attributes (C#)
共通属性 (C#)Common Attributes (C#)
名前付き引数と省略可能な引数Named and Optional Arguments
プログラミングの概念 (C#)Programming Concepts (C#)