Informazioni sul chiamante (C# e Visual Basic)
Mediante il Chiamante di attributi informativi è possibile ottenere informazioni sul chiamante di un metodo.È possibile ottenere il percorso del file del codice sorgente, il numero di riga nel codice sorgente e il nome del chiamante di un metodo.Queste informazioni sono utili per la tracciatura, debug e creare degli strumenti diagnostici.
Per ottenere queste informazioni, utilizzare gli attributi applicati ai parametri facoltativi, ognuno dei quali presenta un valore predefinito.Nella tabella seguente sono elencati gli attributi delle informazioni del chiamante definiti nello spazio dei nomi System.Runtime.CompilerServices :
Attributo |
Descrizione |
Type |
Percorso completo del file di origine contenente il chiamante.Si tratta del percorso del file al momento della compilazione. |
String |
|
Numero di riga nel file di origine per le quali viene chiamato il metodo. |
Integer |
|
Nome di una proprietà o un metodo del chiamante.Vedere Member Names dopo questo argomento. |
String |
Esempio
Nell'esempio riportato di seguito viene illustrato come utilizzare le informazioni degli attributi del chiamante.Per ogni chiamata al metodo TraceMessage, le informazioni del chiamante vengono sostituite come argomenti ai parametri facoltativi.
' Imports System.Runtime.CompilerServices
' Imports System.Diagnostics
Private Sub DoProcessing()
TraceMessage("Something happened.")
End Sub
Public Sub TraceMessage(message As String,
<CallerMemberName> Optional memberName As String = Nothing,
<CallerFilePath> Optional sourcefilePath As String = Nothing,
<CallerLineNumber()> Optional sourceLineNumber As Integer = 0)
Trace.WriteLine("message: " & message)
Trace.WriteLine("member name: " & memberName)
Trace.WriteLine("source file path: " & sourcefilePath)
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
// using System.Runtime.CompilerServices
// using System.Diagnostics;
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
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
Note
È sempre necessario specificare un valore esplicito per ciascun parametro facoltativo.Non è possibile applicare attributi di informazioni del chiamante ai parametri non specificati come facoltativi.
Gli attributi di informazioni del chiamante non restituiscono un parametro facoltativo.Invece, sono il valore predefinito in cui viene passato quando l'argomento è omesso.
I valori di informazioni del chiamante vengono generati come valori letterali in Microsoft Intermediate Language (IL) in fase di compilazione.A differenza dei risultati della proprietà StackTrace per le eccezioni, i risultati non sono interessati da un'offuscamento.
Nomi del membro
È possibile utilizzare l'attributo CallerMemberName per specificare il nome del membro come argomento String al metodo chiamato.Utilizzando questa tecnica, si evita il problema che Refactoring di ridenominazione non modifica i valori String.Questo vantaggio è particolarmente utile per le attività seguenti:
Utilizzo della tracciatura e le procedure di diagnostica.
Implementazione dell'interfaccia INotifyPropertyChanged durante l'associazione dati.Questa interfaccia consente alla proprietà di un oggetto di notificare a un controllo associato le proprietà che è stato modificato, in modo che il controllo possa visualizzare le informazioni aggiornate.Senza l'attributo CallerMemberName, è necessario specificare il nome della proprietà come valore letterale.
Il seguente grafico mostra i nomi dei membri restituiti quando si utilizza l'attributo CallerMemberName.
Le chiamate si verificano in |
Risultato del nome del membro |
---|---|
Metodo, proprietà o evento |
Il nome del metodo, proprietà, o evento della chiamata dalla quale ha avuto origine. |
Costruttore |
La stringa ".ctor" |
Costruttori statici. |
La stringa ".cctor" |
Distruttore |
La stringa "finisce" |
Operatori o conversioni definiti dall'utente |
Il nome generato dal membro, ad esempio, "op_Addition". |
Costruttore dell'attributo |
Nome del membro a cui viene applicato l'attributo.Se l'attributo è un qualsiasi elemento all'interno di un membro (ad esempio un parametro, un valore restituito, o un parametro di tipo generico), il risultato è il nome del membro associato a tale elemento. |
Nessun membro contenitore (ad esempio, a livello di assembly o attributi che sono applicati a tipi) |
Il valore predefinito del parametro facoltativo. |
Vedere anche
Riferimenti
Concetti
Attributi comuni (C# e Visual Basic)
Parametri facoltativi (Visual Basic)
Argomenti denominati e facoltativi (Guida per programmatori C#)