Hívó adatai
A Hívó adatai attribútumok használatával adatokat szerezhet be a hívóról egy metódushoz. Beszerezheti a forráskód fájl elérési útját, a forráskód sorszámát és a hívó tagnevét. Ezek az információk hasznosak a nyomkövetéshez, a hibakereséshez és a diagnosztikai eszközök létrehozásához.
Ezen információk beszerzéséhez olyan attribútumokat kell használnia, amelyek az opcionális paraméterekre vonatkoznak, amelyek mindegyike alapértelmezett értékkel rendelkezik. Az alábbi táblázat a System.Runtime.CompilerServices névtérben definiált hívóinformációs attribútumokat sorolja fel:
Attribútum | Leírás | Típus |
---|---|---|
CallerFilePath | A hívót tartalmazó forrásfájl teljes elérési útja. Ez a fájl elérési útja fordításkor. | String |
CallerLineNumber | Annak a forrásfájlnak a sorszáma, amelyen a metódust meghívják. | Integer |
CallerMemberName | A hívó metódusa vagy tulajdonságneve. Tekintse meg a témakör tagnevek szakaszát. | String |
Példa
Az alábbi példa bemutatja, hogyan használhatja ezeket az attribútumokat egy hívó nyomon követésére.
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}")
Megjegyzések
A hívóinformációs attribútumok csak választható paraméterekre alkalmazhatók. A Hívó adatai attribútumok miatt a fordító megírja a megfelelő értéket minden választható paraméterhez, amely egy hívóinformációs attribútummal van díszítve.
A hívóinformációs értékek fordításkor literálként lesznek kibocsátva a köztes nyelvbe (IL). A StackTrace tulajdonság kivételeinek eredményeitől eltérően az eredményeket nem befolyásolja az elfedés.
Explicit módon megadhatja az opcionális argumentumokat a hívó információinak szabályozásához vagy a hívó adatainak elrejtéséhez.
Tagnevek
Az attribútum használatával elkerülheti, CallerMemberName
hogy a tag nevét argumentumként String
adja meg a hívott metódushoz. Ezzel a technikával elkerülheti azt a problémát, hogy az újrabontás átnevezése nem módosítja az String
értékeket. Ez az előny különösen hasznos a következő feladatokhoz:
- Nyomkövetési és diagnosztikai rutinok használata.
- Az INotifyPropertyChanged interfész implementálása adatok kötésekor. Ez az interfész lehetővé teszi, hogy egy objektum tulajdonsága értesítse a kötött vezérlőelemet arról, hogy a tulajdonság megváltozott, így a vezérlő megjelenítheti a frissített információkat. Az
CallerMemberName
attribútum nélkül a tulajdonság nevét literálként kell megadnia.
Az alábbi diagram a CallerMemberName attribútum használatakor visszaadott tagneveket mutatja.
A hívások a | Tagnév eredménye |
---|---|
Metódus, tulajdonság vagy esemény | Annak a metódusnak, tulajdonságnak vagy eseménynek a neve, amelyből a hívás származik. |
Konstruktor | A ".ctor" sztring |
Statikus konstruktor | A ".cctor" sztring |
Destruktor | A "Véglegesítés" sztring |
Felhasználó által definiált operátorok vagy konverziók | A tag generált neve, például "op_Addition". |
Attribútumkonstruktor | Annak a tagnak a neve, amelyre az attribútumot alkalmazza. Ha az attribútum egy tag bármely eleme (például paraméter, visszatérési érték vagy általános típusparaméter), ez az eredmény annak a tagnak a neve, amely az adott elemhez van társítva. |
Nem tartalmaz tagot (például szerelvényszintű vagy típusokra alkalmazott attribútumokat) | Az opcionális paraméter alapértelmezett értéke. |