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ím metody. Můžete získat cestu k souboru zdrojového kódu, číslo řádku ve zdrojovém kódu a název členu volajícího. Tyto informace jsou užitečné pro trasování, ladění a vytváření diagnostických nástrojů.

Pro získání těchto informací můžete použít atributy, které jsou použity 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ů:

Atribut Popis Typ
CallerFilePathAttribute Úplná cesta zdrojového souboru, který obsahuje volajícího. Toto je cesta k souboru v době kompilace. String
CallerLineNumberAttribute Číslo řádku ve zdrojovém souboru, ve 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 způsob použití atributů Informace o volajícím. Při každém volání TraceMessage metody se informace volajícího nahradí 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

Pro každý volitelný parametr je třeba zadat explicitní výchozí hodnotu. Atributy Informace o volajícím nelze použít u parametrů, které nejsou uvedeny jako volitelné.

Atributy Informace o volajícím neučiní parametr volitelným. Místo toho mají vliv na výchozí hodnotu, která je předána, pokud je argument vynechán.

Hodnoty atributů Informace o volajícím jsou emitovány jako literály do jazyka Intermediate Language (IL) v době kompilace. Na rozdíl od výsledků StackTrace vlastnosti pro výjimky nejsou výsledky ovlivněny obfuskací.

Volitelné argumenty můžete explicitně zadat, chcete-li řídit nebo skrýt informace o volajícím.

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, který refaktoring pro přejmenování nezmění String hodnoty. Tato výhoda se hodí zvláště v těchto úlohách:

  • Použití trasování a diagnostických rutin.

  • INotifyPropertyChanged Implementace rozhraní při vytváření vazeb dat Toto rozhraní umožňuje vlastnosti objektu oznámit vázanému ovládacímu prvku, že došlo ke změně vlastnosti, 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 .

K volání dochází v rámci Výsledek názvu členu
Metoda, vlastnost nebo událost Název metody, vlastnosti nebo události, z nichž bylo volání provedeno.
Konstruktor Řetězec „.ctor“
Statický konstruktor Řetězec „.cctor“
Destruktor Řetězec „Finalize“
Operátory nebo převody definované uživatelem Vygenerovaný název pro člen, například „op_Addition“.
Konstruktor atributu Název členu, na který se atribut používá. Pokud je atribut libovolný prvek v členu (například parametr, návratová hodnota nebo parametr obecného typu), je tento výsledek názvem členu, který je přidružen k tomuto prvku.
Žádný obsahující člen (například úroveň sestavení nebo atributy, které jsou použity 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é