Sdílet prostřednictvím


Informace o volajícím (Visual Basic)

Pomocí atributů Informace o volajícím můžete získat informace o volající metodě. Můžete získat cestu k souboru zdrojového kódu, číslo řádku ve zdrojovém kódu a název člena volajícího. Tyto informace jsou užitečné pro trasování, ladění a vytváření diagnostických nástrojů.

K získání těchto informací použijete atributy, které se použijí 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 System.Runtime.CompilerServices oboru názvů:

Vlastnost Popis Typ
CallerFilePathAttribute Úplná cesta ke zdrojovému souboru, který obsahuje volajícího. Toto je cesta k souboru v době kompilace. String
CallerLineNumberAttribute Číslo řádku ve zdrojovém souboru, na kterém je volána metoda. Integer
CallerMemberNameAttribute Název metody nebo vlastnosti volajícího Viz Názvy členů dále v tomto tématu. String
CallerArgumentExpressionAttribute Výraz používaný volajícím pro argument Viz Výrazy volajícího dále v tomto tématu. String

Příklad

Následující příklad ukazuje, jak používat atributy Informace o volajícím. Při každém volání metody TraceMessage jsou informace volajícího nahrazeny jako argumenty volitelných parametrů.

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  

Poznámky

Je nutné zadat explicitní výchozí hodnotu pro každý volitelný parametr. Atributy Informace o volajícím nelze použít u parametrů, které nejsou zadány jako volitelné.

Atributy Informace o volajícím nevytvářají parametr jako volitelný. Místo toho ovlivňují výchozí hodnotu, která se předá, když je argument vynechán.

Hodnoty informací o volajícím se během kompilace emitují jako literály ve zprostředkujícím jazyce (IL). Výsledky nejsou na rozdíl od StackTrace vlastnosti pro výjimky ovlivněny zatemněním.

Volitelné argumenty můžete explicitně zadat pro řízení informací volajícího nebo skrytí informací volajícího.

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, ve kterém Rename Refactoring nezmění String hodnoty. Tato výhoda je zvlášť užitečná pro následující úlohy:

  • Použití trasovacích a diagnostických rutin

  • Implementace rozhraní INotifyPropertyChanged při vazbě dat. Toto rozhraní umožňuje vlastnost objektu oznámit vázanému ovládacímu prvku, že se vlastnost změnila, 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 .

Volání probíhá v rámci Výsledky jména člena
Metoda, vlastnost nebo událost Název metody, vlastnosti nebo události, ze které volání pochází.
Konstruktor Řetězec ".ctor"
Statický konstruktor Řetězec ".cctor"
Destruktor Řetězec "Finalize"
Uživatelem definované operátory nebo převody Vygenerovaný název člena, například "op_Addition".
Konstruktor atributů Název člena, na který se atribut použije. Pokud je atribut libovolný prvek v rámci členu (například parametr, návratová hodnota nebo parametr obecného typu), tento výsledek je název člena, který je přidružený k tomuto prvku.
Neobsahuje žádného člena (například atributy na úrovni sestavení nebo ty, které jsou aplikovány na typy) Výchozí hodnota volitelného parametru.

Výrazy volajícího

Použijete System.Runtime.CompilerServices.CallerArgumentExpressionAttribute , když chcete zachytit výraz použitý pro argument. Diagnostické knihovny můžou chtít poskytnout další podrobnosti o výrazech předaných jako argumenty . Zadáním výrazu, který aktivoval diagnostiku, mají vývojáři kromě názvu parametru další podrobnosti o podmínce, která diagnostiku aktivovala. Tyto dodatečné informace usnadňují opravu. Následující metoda používá CallerArgumentExpressionAttribute k zobrazení podmínky, která musí být True:

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

Viz také