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.

Vedi anche