Aufruferinformationen (C# und Visual Basic)
Mit Anrufer-Informationens Attribute verwenden, können Sie Informationen über den Aufrufer an eine Methode abgerufen.Sie erhalten Dateipfad des Quellcodes, Zeilennummer im Quellcode und Member des Namens des Aufrufers.Diese Informationen sind für das Debuggen, die Ablaufverfolgung und das Erstellen von Diagnosetools hilfreich.
Zum Abrufen dieser Informationen verwenden Sie die Attribute zu den optionalen Parameter angewendet werden, die jeweils über einen Standardwert verfügt.In der folgenden Tabelle sind die Attribute aufgeführt, die im Anrufer-Informationens System.Runtime.CompilerServices-Namespace definiert sind:
Attribut |
Beschreibung |
type |
Vollständiger Pfad der Quelldatei, die den Aufrufer enthält.Dies ist der Dateipfad zur Kompilierzeit. |
String |
|
Zeilennummer in der Quelldatei ab, in der die Methode aufgerufen wird. |
Integer |
|
Methode oder Eigenschaftenname des Aufrufers.Weitere Informationen finden Sie unter Member Names weiter unten in diesem Thema. |
String |
Beispiel
Im folgenden Beispiel wird gezeigt, wie Anrufer-Informationens von Attributen verwendet.Bei jedem Aufruf der TraceMessage Informationen zum Aufrufer, werden die Methode als Argumente für optionale Parameter ersetzt.
' 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
Hinweise
Sie müssen ein expliziter Standardwert für jeden optionalen Parameter angeben.Sie können Attribute Anrufer-Informationens nicht auf Parameter angewendet werden, die nicht als optional angegeben werden.
Die Attribute Anrufer-Informationens machen einen Parameter nicht optional.Stattdessen haben sie den Standardwert, der übergeben wird, wenn das Argument weggelassen wird.
Anrufer-Informationens Werte werden als Literale in die Intermediate Language (IL) zur Kompilierzeit ausgegeben.Im Gegensatz zu den Ergebnissen der StackTrace-Eigenschaft für Ausnahmen sind die Ergebnisse nach dem Verbergen nicht betroffen.
Member-Namen
Sie können das CallerMemberName-Attribut verwenden, um den Membernamen String als Argument an die aufgerufene Methode festzulegen zu vermeiden.Wenn Sie dieses Verfahren verwenden, vermeiden Sie das Problem, dass Benennen Sie die Umgestaltung nicht die String-Werte ändert.Dieser Vorteil ist besonders nützlich für die folgenden Aufgaben:
Verwenden der Ablaufverfolgung und der Diagnoseprogramme.
Die INotifyPropertyChanged-Schnittstelle implementieren, wenn Daten gebunden sind.Diese Schnittstelle ermöglicht es der Eigenschaft eines Objekts, um ein gebundenes Steuerelement zu benachrichtigen, dass die Eigenschaft geändert wurde, sodass das Steuerelement die aktualisierten Informationen anzeigen kann.Ohne das CallerMemberName-Attribut müssen Sie den Eigenschaftennamen als Literal angeben.
Das folgende Diagramm zeigt die Membernamen an, die zurückgegeben werden, wenn Sie das CallerMemberName-Attribut verwenden.
Aufrufe tritt auf Elemente |
Ergebnis der Membername |
---|---|
Methode, Eigenschaft oder ein Ereignis |
Der Name der Methode, Eigenschaft oder das Ereignis durch Aufruf stammt. |
Konstruktor |
Die Zeichenfolge „.ctor“ |
Statischer Konstruktor |
Die Zeichenfolge „.cctor“ |
Destruktor |
Die Zeichenfolge „Schließen“ |
Benutzerdefinierte Operatoren oder Konvertierungen |
Der generierte Name für den Member, z. B. „op_Addition“. |
Attributkonstruktor |
Der Name des Members, auf den das Attribut angewendet wird.Wenn das Attribut ein Element innerhalb eines Members (z. B. einen Parameter, ein Rückgabewert oder ein generischer Typparameter) ist, ist das Ergebnis der Name des Members, das diesem Element zugeordnet ist. |
Kein enthaltener Member (z. B. auf Assemblyebene oder Attribute, die auf Typen angewendet werden) |
Der Standardwert des optionalen Parameters. |
Siehe auch
Referenz
Attribute (C# und Visual Basic)
Konzepte
Allgemeine Attribute (C# und Visual Basic)
Optionale Parameter (Visual Basic)
Benannte und optionale Argumente (C#-Programmierhandbuch)