Freigeben über


Anruferinformationen (Visual Basic)

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 Truemuss:

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

Siehe auch