Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mithilfe von Caller Info-Attributen können Sie Informationen über den Aufrufer einer Methode abrufen. Sie können den Dateipfad des Quellcodes, die Zeilennummer im Quellcode und den Membernamen des Aufrufers abrufen. Diese Informationen sind hilfreich für die Ablaufverfolgung, das Debuggen und das Erstellen von Diagnosetools.
Um diese Informationen zu erhalten, verwenden Sie Attribute, die auf optionale Parameter angewendet werden, die jeweils einen Standardwert aufweisen. In der folgenden Tabelle sind die Caller Info-Attribute aufgeführt, die im System.Runtime.CompilerServices-Namespace definiert sind.
Merkmal | BESCHREIBUNG | Typ |
---|---|---|
CallerFilePathAttribute | Vollständiger Pfad der Quelldatei, die den Aufrufer enthält. Dies ist der Dateipfad während der Kompilierung. | String |
CallerLineNumberAttribute | Zeilennummer in der Quelldatei, bei der die Methode aufgerufen wird. | Integer |
CallerMemberNameAttribute | Der Methoden- oder Eigenschaftenname des Aufrufers. Weitere Informationen finden Sie weiter unten in diesem Thema unter "Mitgliedernamen ". | String |
CallerArgumentExpressionAttribute | Ausdruck, der vom Aufrufer für ein Argument verwendet wird. Sehen Sie Ausdrücke des Anrufers später in diesem Thema. | String |
Beispiel
Das folgende Beispiel zeigt, wie Caller Info-Attribute verwendet werden. Bei jedem Aufruf der TraceMessage
Methode werden die Aufruferinformationen als Argumente für die optionalen Parameter ersetzt.
Private Sub DoProcessing()
TraceMessage("Something happened.")
End Sub
Public Sub TraceMessage(message As String,
<System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing,
<System.Runtime.CompilerServices.CallerFilePath> Optional sourcefilePath As String = Nothing,
<System.Runtime.CompilerServices.CallerLineNumber()> Optional sourceLineNumber As Integer = 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)
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
Bemerkungen
Sie müssen für jeden optionalen Parameter einen expliziten Standardwert angeben. Sie können Aufruferinfo-Attribute nicht auf Parameter anwenden, die nicht als optional angegeben sind.
Die Caller Info-Attribute machen keinen Parameter optional. Stattdessen wirken sie sich auf den Standardwert aus, der beim Weglassen des Arguments übergeben wird.
Aufrufer-Informationswerte werden zur Kompilierzeit als Literale in Intermediate Language (IL) ausgegeben. Im Gegensatz zu den Ergebnissen der StackTrace Eigenschaft für Ausnahmen werden die Ergebnisse nicht durch Verschleierung beeinflusst.
Sie können explizit die optionalen Argumente angeben, um die Aufruferinformationen zu steuern oder Aufruferinformationen auszublenden.
Mitgliedsnamen
Sie können das CallerMemberName
Attribut verwenden, um die Angabe des Membernamens als String
Argument für die aufgerufene Methode zu vermeiden. Auf diese Weise umgehen Sie das Problem, dass durch die Umgestaltung mit Umbenennung die String
-Werte nicht geändert werden. Dieser Vorteil ist besonders nützlich für die folgenden Aufgaben:
Verwenden der Ablaufverfolgung und der Diagnoseprogramme
Implementieren der INotifyPropertyChanged Schnittstelle beim Binden von Daten. Diese Schnittstelle ermöglicht es der Eigenschaft eines Objekts, ein gebundenes Steuerelement zu benachrichtigen, dass die Eigenschaft geändert wurde, damit das Steuerelement die aktualisierten Informationen anzeigen kann. Ohne das
CallerMemberName
Attribut müssen Sie den Eigenschaftsnamen als Literal angeben.
Das folgende Diagramm zeigt die Membernamen, die zurückgegeben werden, wenn Sie das CallerMemberName
Attribut verwenden.
Aufrufe erfolgen in | Membernamenergebnis |
---|---|
Methode, Eigenschaft oder Ereignis | Der Name der Methode, Eigenschaft oder des Ereignisses, von dem der Aufruf stammt. |
Konstruktor | Die Zeichenfolge „.ctor“ |
Statischer Konstruktor | Die Zeichenfolge „.cctor“ |
Destruktor | Die Zeichenfolge „Finalize“ |
Benutzerdefinierte Operatoren oder Konvertierungen | Der generierte Name für das Mitglied, z. B. "op_Addition". |
Attributkonstruktor | Der Name des Elements, auf das das Attribut angewendet wird. Wenn es sich bei dem Attribut um ein Element innerhalb eines Elements handelt (z. B. einen Parameter, einen Rückgabewert oder einen generischen Typparameter), ist dieses Ergebnis der Name des Elements, das diesem Element zugeordnet ist. |
Kein enthaltenes Element (z. B. Assemblyebene oder Attribute, die auf Typen angewendet werden) | Der Standardwert des optionalen Parameters. |
Aufruferausdrücke
Sie verwenden System.Runtime.CompilerServices.CallerArgumentExpressionAttribute, wenn Sie den Ausdruck erfassen möchten, der für ein Argument verwendet wird. Diagnosebibliotheken möchten möglicherweise weitere Details zu den ausdrücken , die als Argumente übergeben werden. Durch Bereitstellen des Ausdrucks, der die Diagnose ausgelöst hat, verfügen Entwickler zusätzlich zum Parameternamen über weitere Details zu der Bedingung, die die Diagnose ausgelöst hat. Diese zusätzlichen Informationen erleichtern das Beheben. Die folgende Methode verwendet zum CallerArgumentExpressionAttribute Anzeigen der Bedingung, die folgendes sein True
muss:
Public Shared Sub ValidateArgument(ByVal parameterName As String,
ByVal condition As Boolean,
<CallerArgumentExpression("condition")> ByVal Optional message As String? = Nothing)
If Not condition Then
Throw New ArgumentException($"Argument failed validation: <{message}>", parameterName)
End If
End Sub