Aufruferinformationen (C#)Caller Information (C#)

Mithilfe der Aufrufer-Informationsattribute können Sie Informationen zum Aufrufer einer Methode abrufen.By using Caller Info attributes, you can obtain information about the caller to a method. Sie können den Dateipfad des Quellcodes, die Zeilennummer im Quellcode und den Membernamen des Aufrufers abrufen.You can obtain file path of the source code, the line number in the source code, and the member name of the caller. Diese Informationen sind zum Verfolgen, Debuggen und Erstellen von Diagnosetools sehr nützlich.This information is helpful for tracing, debugging, and creating diagnostic tools.

Um diese Informationen zu erhalten, verwenden Sie die Attribute, die auf optionale Parameter angewendet werden, von denen jeder einen Standardwert besitzt.To obtain this information, you use attributes that are applied to optional parameters, each of which has a default value. In der folgenden Tabelle sind die Aufrufer-Informationsattribute angegeben, die im System.Runtime.CompilerServices-Namespace definiert sind:The following table lists the Caller Info attributes that are defined in the System.Runtime.CompilerServices namespace:

AttributAttribute BeschreibungDescription TypType
CallerFilePathAttribute Vollständiger Pfad der Quelldatei, die den Aufrufer enthält.Full path of the source file that contains the caller. Dies ist der Dateipfad zum Zeitpunkt der Kompilierung.This is the file path at compile time. String
CallerLineNumberAttribute Zeilennummer in der Quelldatei, in der die Methode aufgerufen wird.Line number in the source file at which the method is called. Integer
CallerMemberNameAttribute Der Methoden- oder Eigenschaftenname des Aufrufers.Method or property name of the caller. Weitere Informationen hierzu finden Sie unter Membernamen weiter unten in diesem Thema.See Member Names later in this topic. String

BeispielExample

Im folgenden Beispiel wird die Verwendung der Aufrufer-Informationsattribute veranschaulicht.The following example shows how to use Caller Info attributes. Bei jedem Aufruf der TraceMessage-Methode werden die Aufruferinformationen als Argumente für optionale Parameter ersetzt.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  

HinweiseRemarks

Sie müssen einen expliziten Standardwert für jeden optionalen Parameter angeben.You must specify an explicit default value for each optional parameter. Sie können Aufrufer-Informationsattribute nicht auf Parameter anwenden, die nicht als optional festgelegt wurden.You can't apply Caller Info attributes to parameters that aren't specified as optional.

Durch die Aufrufer-Informationsattribute wird ein Parameter nicht optional.The Caller Info attributes don't make a parameter optional. Stattdessen beeinflussen sie den Standardwert, der beim Auslassen des Arguments übergeben wird.Instead, they affect the default value that's passed in when the argument is omitted.

Aufrufer-Informationswerte werden zur Kompilierzeit als Literale in Intermediate Language (IL) ausgegeben.Caller Info values are emitted as literals into the Intermediate Language (IL) at compile time. Im Gegensatz zu den Ergebnissen der StackTrace-Eigenschaft für Ausnahmen werden die Ergebnisse nicht durch Verbergen beeinflusst.Unlike the results of the StackTrace property for exceptions, the results aren't affected by obfuscation.

Sie können die optionalen Argumente explizit angeben, um die Aufruferinformationen zu steuern oder auszublenden.You can explicitly supply the optional arguments to control the caller information or to hide caller information.

MembernamenMember Names

Sie können das CallerMemberName-Attribut verwenden, um den Membernamen nicht als String-Argument für die aufgerufene Methode angeben zu müssen.You can use the CallerMemberName attribute to avoid specifying the member name as a String argument to the called method. Auf diese Weise umgehen Sie das Problem, dass durch die Umgestaltung mit Umbenennung die String-Werte nicht geändert werden.By using this technique, you avoid the problem that Rename Refactoring doesn't change the String values. Dieser Vorteil ist für die folgenden Aufgaben besonders hilfreich:This benefit is especially useful for the following tasks:

  • Verwenden der Ablaufverfolgung und der DiagnoseprogrammeUsing tracing and diagnostic routines.

  • Implementieren der INotifyPropertyChanged-Schnittstelle beim Binden von DatenImplementing the INotifyPropertyChanged interface when binding data. Diese Schnittstelle ermöglicht es der Eigenschaft eines Objekts, ein gebundenes Steuerelement über die Änderung der Eigenschaft zu benachrichtigen, damit das Steuerelement die aktualisierten Informationen anzeigen kann.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. Ohne das CallerMemberName-Attribut müssen Sie den Eigenschaftennamen als Literal angeben.Without the CallerMemberName attribute, you must specify the property name as a literal.

Im folgenden Diagramm sind die Membernamen aufgeführt, die beim Verwenden des CallerMemberName-Attributs zurückgegeben werden.The following chart shows the member names that are returned when you use the CallerMemberName attribute.

Aufrufe erfolgen inCalls occurs within Ergebnis des MembernamensMember name result
Methode, Eigenschaft oder EreignisMethod, property, or event Der Name der Methode, der Eigenschaft oder des Ereignisses, aus dem bzw. aus der der Aufruf stammt.The name of the method, property, or event from which the call originated.
KonstruktorConstructor Die Zeichenfolge ".ctor"The string ".ctor"
Statischer KonstruktorStatic constructor Die Zeichenfolge ".cctor"The string ".cctor"
DestruktorDestructor Die Zeichenfolge "Finalize"The string "Finalize"
Benutzerdefinierte Operatoren oder KonvertierungenUser-defined operators or conversions Der generierte Name für den Member, beispielsweise "op_Addition".The generated name for the member, for example, "op_Addition".
AttributkonstruktorAttribute constructor Der Name des Members, auf den das Attribut angewendet wird.The name of the member to which the attribute is applied. Wenn das Attribut ein beliebiges Element in einem Member ist (z. B. ein Parameter, ein Rückgabewert oder ein generischer Typparameter), wird als Ergebnis der Name des Members ausgegeben, der diesem Element zugeordnet ist.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.
Kein enthaltender Member (z. B. auf Assemblyebene oder Attribute, die auf Typen angewendet werden)No containing member (for example, assembly-level or attributes that are applied to types) Der Standardwert des optionalen Parameters.The default value of the optional parameter.

Siehe auchSee Also

Attribute (C#)Attributes (C#)
Allgemeine Attribute (C#)Common Attributes (C#)
Benannte und optionale ArgumenteNamed and Optional Arguments
Programmierkonzepte (C#)Programming Concepts (C#)