Informazioni sul chiamante
Gli attributi di informazioni sul chiamante consentono di 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. Queste informazioni sono utili per la tracciatura, il debug e la creazione di strumenti diagnostici.
Per ottenere queste informazioni, utilizzare gli attributi applicati ai parametri facoltativi, a ognuno dei quali è associato un valore predefinito. Nella tabella seguente sono elencati gli attributi delle informazioni sul chiamante definiti nello spazio dei nomi System.Runtime.CompilerServices :
Attributo | Descrizione | Tipo |
---|---|---|
CallerFilePath | Percorso completo del file di origine contenente il chiamante. Si tratta del percorso del file al momento della compilazione. | String |
CallerLineNumber | Numero di riga nel file di origine in cui viene chiamato il metodo. | Integer |
CallerMemberName | Nome di una proprietà o di un metodo del chiamante. Vedere la sezione Nomi membri più avanti in questo argomento. | String |
Esempio
Nell'esempio seguente viene illustrato come usare questi attributi per tracciare un chiamante.
open System.Diagnostics
open System.Runtime.CompilerServices
open System.Runtime.InteropServices
type Tracer() =
member _.DoTrace(message: string,
[<CallerMemberName; Optional; DefaultParameterValue("")>] memberName: string,
[<CallerFilePath; Optional; DefaultParameterValue("")>] path: string,
[<CallerLineNumber; Optional; DefaultParameterValue(0)>] line: int) =
Trace.WriteLine(sprintf $"Message: {message}")
Trace.WriteLine(sprintf $"Member name: {memberName}")
Trace.WriteLine(sprintf $"Source file path: {path}")
Trace.WriteLine(sprintf $"Source line number: {line}")
Osservazioni:
Gli attributi info chiamante possono essere applicati solo ai parametri facoltativi. Gli attributi info chiamante determinano al compilatore di scrivere il valore appropriato per ogni parametro facoltativo decorato con un attributo Caller Info.
I valori delle informazioni sul chiamante vengono generati come valori letterali in Intermediate Language (IL) in fase di compilazione. A differenza dei risultati della proprietà StackTrace per le eccezioni, i risultati non sono interessati dall'offuscamento.
È possibile fornire esplicitamente gli argomenti facoltativi per esaminare o nascondere le informazioni sul chiamante.
Nomi dei membri
È possibile utilizzare l'attributo CallerMemberName
per specificare il nome del membro come argomento String
al metodo chiamato. Usando questa tecnica, si evita il problema che Rinomina refactoring non modifica i String
valori. Questo vantaggio è particolarmente utile per le attività seguenti:
- Utilizzo della tracciatura e delle routine di diagnostica.
- Implementazione dell'interfaccia INotifyPropertyChanged durante l'associazione dei dati. Questa interfaccia consente alla proprietà di un oggetto di notificare a un controllo associato la modifica della proprietà stessa in modo che il controllo possa visualizzare le informazioni aggiornate. Senza l'attributo
CallerMemberName
, è necessario specificare il nome della proprietà come valore letterale.
Il grafico seguente mostra i nomi dei membri restituiti quando si usa l'attributo CallerMemberName.
Elemento in cui si verificano le chiamate | Nome del membro restituito |
---|---|
Metodo, proprietà o evento | Nome del metodo, della proprietà o dell'evento da cui la chiamata ha avuto origine. |
Costruttore | Stringa ".ctor" |
Costruttore statico | Stringa ".cctor" |
Distruttore | Stringa "Finalize" |
Operatori o conversioni definiti dall'utente | Nome generato per il membro, ad esempio "op_Addition". |
Costruttore dell'attributo | Nome del membro a cui viene applicato l'attributo. Se l'attributo è un qualsiasi elemento in 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 applicati a tipi) | Valore predefinito del parametro facoltativo. |