예약된 특성: 호출자 정보 확인Reserved attributes: Determine caller information

정보 특성을 사용하여 메서드 호출자에 대한 정보를 가져옵니다.Using info attributes, you obtain information about the caller to a method. 소스 코드 파일 경로, 소스 코드 줄 번호 및 호출자의 멤버 이름을 가져옵니다.You obtain the file path of the source code, the line number in the source code, and the member name of the caller. 멤버 호출자 정보를 얻으려면 선택적 매개 변수에 적용되는 특성을 사용합니다.To obtain member caller information, you use attributes that are applied to optional parameters. 각 선택적 매개 변수는 기본값을 지정합니다.Each optional parameter specifies 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. 전체 경로는 컴파일 시간의 경로입니다.The full path is the path at compile time. String
CallerLineNumberAttribute 메서드가 호출되는 소스 파일의 줄 번호입니다.Line number in the source file from which the method is called. Integer
CallerMemberNameAttribute 호출자의 메서드 이름 또는 속성 이름입니다.Method name or property name of the caller. String

이 정보는 추적, 디버깅을 작성하고 진단 도구를 만드는 데 도움이 됩니다.This information helps you write tracing, debugging, and create diagnostic tools. 다음 예제에서는 호출자 정보 특성을 사용하는 방법을 보여 줍니다.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,
        [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:\Visual Studio Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31

각각의 선택적 매개 변수에 대한 명시적 기본값을 지정합니다.You 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 occur 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 constructor 특성이 적용되는 메서드 또는 속성의 이름입니다.The name of the method or property 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