Sdílet prostřednictvím


Informace o volajícím (C# and 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 obsahuje atributy Informace o volajícím, které jsou definovány v oboru názvů System.Runtime.CompilerServices:

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 část Názvy členů 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.Pro všechna volání metody TraceMessage jsou informace o volajícím pro volitelné parametry nahrazeny v podobě argumentů.

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
public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 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);
}

// Sample Output: 
//  message: Something happened. 
//  member name: DoProcessing 
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs 
//  source line number: 31

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ů vlastnosti StackTrace 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.

Názvy členů

Atribut CallerMemberName můžete použít, chcete-li se vyhnout zadávání názvu členu jako argumentu String volané metody.Tímto způsobem se vyhnete problému s tím, že Refaktoring přejmenování nemění hodnoty argumentu String.Tato výhoda se hodí zvláště v těchto úlohách:

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

  • Implementace rozhraní INotifyPropertyChanged při vázání 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 v podobě literálu.

Následující graf ukazuje názvy členů, které jsou vráceny 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.

Viz také

Referenční dokumentace

Atributy (C# and Visual Basic)

Koncepty

Běžné atributy (C# and Visual Basic)

Volitelné parametry (Visual Basic)

Pojmenované a nepovinné argumenty (Průvodce programováním v C#)

Další zdroje

Koncepty programování