Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 névtérben System.Runtime.CompilerServices definiált hívóinformációs attribútumokat sorolja fel:
| Jellemző | Leírás | típus |
|---|---|---|
| CallerFilePathAttribute | A hívót tartalmazó forrásfájl teljes elérési útja. Ez a fájl elérési útja fordítási időben. | String |
| CallerLineNumberAttribute | Annak a forrásfájlnak a sorszáma, amelyen a metódust meghívják. | Integer |
| CallerMemberNameAttribute | A hívó metódusa vagy tulajdonságneve. A témakör későbbi részében lásd a tagneveket. | String |
| CallerArgumentExpressionAttribute | A hívó által argumentumként használt kifejezés. Lásd a hívókifejezéseket a témakör későbbi részében. | String |
példa
Az alábbi példa bemutatja, hogyan használhatja a Hívó adatai attribútumokat. A metódus minden hívása TraceMessage esetén a hívó adatai argumentumként lesznek helyettesítve az opcionális paraméterekkel.
Private Sub DoProcessing()
TraceMessage("Something happened.")
End Sub
Public Sub TraceMessage(message As String,
<System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing,
<System.Runtime.CompilerServices.CallerFilePath> Optional sourcefilePath As String = Nothing,
<System.Runtime.CompilerServices.CallerLineNumber()> Optional sourceLineNumber As Integer = 0)
System.Diagnostics.Trace.WriteLine("message: " & message)
System.Diagnostics.Trace.WriteLine("member name: " & memberName)
System.Diagnostics.Trace.WriteLine("source file path: " & sourcefilePath)
System.Diagnostics.Trace.WriteLine("source line number: " & sourceLineNumber)
End Sub
' Sample output:
' message: Something happened.
' member name: DoProcessing
' source file path: C:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoVB\CallerInfoVB\Form1.vb
' source line number: 15
Megjegyzések
Minden választható paraméterhez explicit alapértelmezett értéket kell megadnia. Nem alkalmazhat hívóinformációs attribútumokat olyan paraméterekre, amelyek nem választhatóként nincsenek megadva.
A Hívó adatai attribútumok nem teszik opcionálissá a paramétert. Ehelyett az argumentum kihagyásakor átadott alapértelmezett értéket befolyásolják.
A hívóazonosító információk értékei fordításkor literálokként lesznek kibocsátva a Köztes Nyelvben (IL). A kivételek tulajdonságának StackTrace eredményeivel ellentétben 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 CallerMemberName attribútum használatával elkerülheti, hogy a tag nevét String argumentumként adja meg a hívott metódushoz. Ezzel a technikával elkerülheti azt a problémát, hogy a refactoring keretében történő átnevezés 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 interfész implementálása adatok hozzárendelésekor INotifyPropertyChanged. 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
CallerMemberNameattribútum nélkül a tulajdonság nevét literálként kell megadnia.
Az alábbi diagram az attribútum használatakor CallerMemberName visszaadott tagneveket mutatja.
| A hívások a következő időszakban történnek | Felhasználói né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' karakterlánc |
| Statikus konstruktor | A ".cctor" sztring |
| Destruktor | "Véglegesítés" karakterlánc |
| 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. |
Hívókifejezések
Amikor rögzíteni szeretné az érveléshez használt kifejezést, akkor a System.Runtime.CompilerServices.CallerArgumentExpressionAttribute-t használja. Előfordulhat, hogy a diagnosztikai kódtárak további részleteket szeretnének megadni az argumentumként átadott kifejezésekről . A diagnosztika kiváltó kifejezésének megadásával a paraméternév mellett a fejlesztők további részleteket is megtudhatnak a diagnosztika kiváltó feltételéről. Ez a további információ megkönnyíti a javítást. A következő módszer a CallerArgumentExpressionAttribute feltétel True megjelenítésére használható:
Public Shared Sub ValidateArgument(ByVal parameterName As String,
ByVal condition As Boolean,
<CallerArgumentExpression("condition")> ByVal Optional message As String? = Nothing)
If Not condition Then
Throw New ArgumentException($"Argument failed validation: <{message}>", parameterName)
End If
End Sub