Informace o volajícím
Pomocí atributů Informace o volajícím můžete získat informace o volajícím metody. Můžete získat cestu k souboru zdrojového kódu, číslo řádku ve zdrojovém kódu a název členu volajícího. Tyto informace jsou užitečné pro trasování, ladění a vytváření diagnostických nástrojů.
Pro získání těchto informací můžete použít atributy, které jsou použity na volitelné parametry, z nichž každý má výchozí hodnotu. Následující tabulka uvádí atributy Informace o volajícím, které jsou definovány v oboru názvů System.Runtime.CompilerServices :
Atribut | Popis | Typ |
---|---|---|
CallerFilePath | Úplná cesta zdrojového souboru, který obsahuje volajícího. Toto je cesta k souboru v době kompilace. | String |
CallerLineNumber | Číslo řádku ve zdrojovém souboru, ve kterém je volána metoda. | Integer |
CallerMemberName | Název metody nebo vlastnosti volajícího. Viz část Názvy členů dále v tomto tématu. | String |
Příklad
Následující příklad ukazuje, jak můžete tyto atributy použít k trasování volajícího.
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}")
Poznámky
Atributy Informace o volajícím lze použít pouze u volitelných parametrů. Atributy Informace o volajícím způsobí, že kompilátor zapíše správnou hodnotu pro každý volitelný parametr zdobený atributem Informace o volajícím.
Hodnoty atributů Informace o volajícím jsou emitovány jako literály do jazyka Intermediate Language (IL) v době kompilace. Na rozdíl od výsledků vlastnosti StackTrace pro výjimky nejsou výsledky ovlivněny obfuskací.
Volitelné argumenty můžete explicitně zadat, chcete-li řídit nebo skrýt informace o volajícím.
Jména členů
Atribut můžete použít CallerMemberName
k tomu, abyste zabránili zadání názvu člena jako argumentu pro volanou String
metodu. Pomocí této techniky se vyhnete problému, který refaktoring pro přejmenování nezmění String
hodnoty. Tato výhoda se hodí zvláště v těchto úlohách:
- Použití trasování a diagnostických rutin.
- Implementace INotifyPropertyChanged rozhraní při vazbě dat. Toto rozhraní umožňuje vlastnosti objektu oznámit vázanému ovládacímu prvku, že došlo ke změně vlastnosti, aby ovládací prvek mohl zobrazit aktualizované informace. Bez atributu
CallerMemberName
je nutné zadat název vlastnosti jako literál.
Následující graf ukazuje názvy členů, které se vrátí při použití atributu CallerMemberName.
K volání dochází v rámci | Výsledek názvu členu |
---|---|
Metoda, vlastnost nebo událost | Název metody, vlastnosti nebo události, z nichž bylo volání provedeno. |
Konstruktor | Řetězec „.ctor“ |
Statický konstruktor | Řetězec „.cctor“ |
Destruktor | Řetězec „Finalize“ |
Operátory nebo převody definované uživatelem | Vygenerovaný název pro člen, například „op_Addition“. |
Konstruktor atributu | Název členu, na který se atribut používá. Pokud je atribut libovolný prvek v členu (například parametr, návratová hodnota nebo parametr obecného typu), je tento výsledek názvem členu, který je přidružen k tomuto prvku. |
Žádný obsahující člen (například úroveň sestavení nebo atributy, které jsou použity na typy) | Výchozí hodnota volitelného parametru. |