Dela via


Information om uppringaren

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 namnområdet System.Runtime.CompilerServices :

Attribut beskrivning Typ
CallerFilePath Fullständig sökväg till källfilen som innehåller anroparen. Det här är filsökvägen vid kompileringstillfället. String
CallerLineNumber Radnummer i källfilen där metoden anropas. Integer
CallerMemberName Anroparens metod- eller egenskapsnamn. Se avsnittet Medlemsnamn senare i det här avsnittet. String

Exempel

I följande exempel visas hur du kan använda dessa attribut för att spåra en anropare.

open System.Diagnostics
open System.Runtime.CompilerServices
open System.Runtime.InteropServices

type Tracer() =
    member _.DoTrace(message: string,
                      [<CallerMemberName; Optional; DefaultParameterValue("")>] memberName: string,
                      [<CallerFilePath; Optional; DefaultParameterValue("")>] path: string,
                      [<CallerLineNumber; Optional; DefaultParameterValue(0)>] line: int) =
        Trace.WriteLine(sprintf $"Message: {message}")
        Trace.WriteLine(sprintf $"Member name: {memberName}")
        Trace.WriteLine(sprintf $"Source file path: {path}")
        Trace.WriteLine(sprintf $"Source line number: {line}")

Kommentarer

Anroparinformationsattribut kan endast tillämpas på valfria parametrar. Anroparinformationsattributen gör att kompilatorn skriver rätt värde för varje valfri parameter som är dekorerad med ett Caller Info-attribut.

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 INotifyPropertyChanged vid bindning av 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.

Följande diagram visar 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.

Se även