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. |