Caller Information (Visual Basic) (Aufruferinformationen (Visual Basic))

Mithilfe der Aufrufer-Informationsattribute können Sie Informationen zum Aufrufer einer Methode abrufen. Sie können den Dateipfad des Quellcodes, die Zeilennummer im Quellcode und den Membernamen des Aufrufers abrufen. Diese Informationen sind zum Verfolgen, Debuggen und Erstellen von Diagnosetools sehr nützlich.

Um diese Informationen zu erhalten, verwenden Sie die Attribute, die auf optionale Parameter angewendet werden, von denen jeder einen Standardwert besitzt. In der folgenden Tabelle sind die Aufrufer-Informationsattribute angegeben, die im System.Runtime.CompilerServices-Namespace definiert sind:

Attribut BESCHREIBUNG Typ
CallerFilePathAttribute Vollständiger Pfad der Quelldatei, die den Aufrufer enthält. Dies ist der Dateipfad zum Zeitpunkt der Kompilierung. String
CallerLineNumberAttribute Zeilennummer in der Quelldatei, in der die Methode aufgerufen wird. Integer
CallerMemberNameAttribute Der Methoden- oder Eigenschaftenname des Aufrufers. Weitere Informationen hierzu finden Sie unter Membernamen weiter unten in diesem Thema. String
CallerArgumentExpressionAttribute Ausdruck, der vom Aufrufer für ein Argument verwendet wird. Siehe Anruferausdrücke weiter unten in diesem Thema. String

Beispiel

Im folgenden Beispiel wird die Verwendung der Aufrufer-Informationsattribute veranschaulicht. Bei jedem Aufruf der TraceMessage-Methode werden die Aufruferinformationen als Argumente für optionale 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 einen expliziten Standardwert für jeden optionalen Parameter angeben. Sie können Aufrufer-Informationsattribute nicht auf Parameter anwenden, die nicht als optional festgelegt wurden.

Durch die Aufrufer-Informationsattribute wird ein Parameter nicht optional. Stattdessen beeinflussen sie den Standardwert, der beim Auslassen 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 Verbergen beeinflusst.

Sie können die optionalen Argumente explizit angeben, um die Aufruferinformationen zu steuern oder auszublenden.

Membernamen

Sie können das CallerMemberName-Attribut verwenden, um den Membernamen nicht als String-Argument für die aufgerufene Methode angeben zu müssen. Auf diese Weise umgehen Sie das Problem, dass durch die Umgestaltung mit Umbenennung die String-Werte nicht geändert werden. Dieser Vorteil ist für die folgenden Aufgaben besonders hilfreich:

  • 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 über die Änderung der Eigenschaft zu benachrichtigen, damit das Steuerelement die aktualisierten Informationen anzeigen kann. Ohne das CallerMemberName-Attribut müssen Sie den Eigenschaftennamen als Literal angeben.

Im folgenden Diagramm sind die Membernamen aufgeführt, die beim Verwenden des CallerMemberName-Attributs zurückgegeben werden.

Aufrufe erfolgen in Membernamenergebnis
Methode, Eigenschaft oder Ereignis Der Name der Methode, der Eigenschaft oder des Ereignisses, aus dem bzw. aus der 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 den Member, beispielsweise „op_Addition“.
Attributkonstruktor Der Name des Members, auf den das Attribut angewendet wird. 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.
Kein enthaltender Member (z. B. auf Assemblyebene oder Attribute, die auf Typen angewendet werden) Der Standardwert des optionalen Parameters.

Aufruferausdrücke

Sie verwenden die System.Runtime.CompilerServices.CallerArgumentExpressionAttribute Verwendung, wenn Sie den ausdruck erfassen möchten, der für ein Argument verwendet wird. Diagnosebibliotheken sollten weitere Details zu den an Argumente übergebenen Ausdrücken bereitstellen. Durch die Bereitstellung des Ausdrucks, der die Diagnose ausgelöst hat, verfügen Entwickler zusätzlich zum Parameternamen weitere Details zur Bedingung, die die Diagnose ausgelöst hat. Diese zusätzlichen Informationen erleichtern die Behebung. 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