Share via


Information om uppringare (Visual Basic)

Med hjälp av attribut för samtalsinformation kan du hämta information om anroparen till en metod. Du kan hämta filsökvägen för källkoden, radnumret i källkoden och namnet på anroparen. Den här informationen är användbar för att spåra, felsöka och skapa diagnostikverktyg.

För att hämta den här informationen använder du attribut som tillämpas på valfria parametrar, som var och en har ett standardvärde. I följande tabell visas de anroparinformationsattribut som definieras i System.Runtime.CompilerServices namnområdet:

Attribut beskrivning Typ
CallerFilePathAttribute Fullständig sökväg till källfilen som innehåller anroparen. Det här är filsökvägen vid kompileringstillfället. String
CallerLineNumberAttribute Radnummer i källfilen där metoden anropas. Integer
CallerMemberNameAttribute Anroparens metod- eller egenskapsnamn. Se Medlemsnamn senare i det här avsnittet. String
CallerArgumentExpressionAttribute Uttryck som används av anroparen för ett argument. Se Anroparuttryck senare i det här avsnittet. String

Exempel

I följande exempel visas hur du använder attribut för uppringarens information. Vid varje anrop till TraceMessage metoden ersätts uppringarens information som argument till de valfria parametrarna.

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  

Kommentarer

Du måste ange ett explicit standardvärde för varje valfri parameter. Du kan inte använda anroparinformationsattribut för parametrar som inte har angetts som valfria.

Anroparinformationsattributen gör ingen parameter valfri. I stället påverkar de standardvärdet som skickas när argumentet utelämnas.

Värden för uppringarens information genereras som literaler till det mellanliggande språket (IL) vid kompileringstillfället. Till skillnad från resultatet av StackTrace egenskapen för undantag påverkas inte resultatet av fördunkling.

Du kan uttryckligen ange valfria argument för att styra uppringarens information eller dölja uppringarens information.

Medlemsnamn

Du kan använda CallerMemberName attributet för att undvika att ange medlemsnamnet som ett String argument för den anropade metoden. Med den här tekniken undviker du problemet att Byt namn på refaktorisering inte ändrar String värdena. Den här fördelen är särskilt användbar för följande uppgifter:

  • Använda spårnings- och diagnostikrutiner.

  • Implementera gränssnittet vid bindning av INotifyPropertyChanged data. Med det här gränssnittet kan egenskapen för ett objekt meddela en bunden kontroll att egenskapen har ändrats, så att kontrollen kan visa den uppdaterade informationen. CallerMemberName Utan attributet måste du ange egenskapsnamnet som en literal.

I följande diagram visas de medlemsnamn som returneras när du använder attributet CallerMemberName .

Samtal sker inom Resultat av medlemsnamn
Metod, egenskap eller händelse Namnet på den metod, egenskap eller händelse som anropet kommer från.
Konstruktor Strängen ".ctor"
Statisk konstruktor Strängen ".cctor"
Destructor Strängen "Slutför"
Användardefinierade operatorer eller konverteringar Det genererade namnet på medlemmen, till exempel "op_Addition".
Attributkonstruktor Namnet på den medlem som attributet tillämpas på. Om attributet är ett element inom en medlem (till exempel en parameter, ett returvärde eller en allmän typparameter) är det här resultatet namnet på den medlem som är associerad med det elementet.
Ingen medlem som innehåller (till exempel sammansättningsnivå eller attribut som tillämpas på typer) Standardvärdet för den valfria parametern.

Anroparuttryck

Du använder System.Runtime.CompilerServices.CallerArgumentExpressionAttribute när du vill avbilda uttrycket som används för ett argument. Diagnostikbibliotek kanske vill ge mer information om de uttryck som skickas som argument. Genom att ange det uttryck som utlöste diagnostiken har utvecklare, förutom parameternamnet, mer information om villkoret som utlöste diagnostiken. Den extra informationen gör det lättare att åtgärda. Följande metod använder CallerArgumentExpressionAttribute för att visa villkoret som måste vara True:

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

Se även