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


Hívó adatai (Visual Basic)

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 CallerMemberName attribú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

Lásd még