Megosztás a következőn keresztül:


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.

Lásd még