Informazioni sul chiamante (Visual Basic)
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 di informazioni sul chiamante definiti nello spazio dei nomi System.Runtime.CompilerServices:
Attributo | Descrizione | Tipo |
---|---|---|
CallerFilePathAttribute | Percorso completo del file di origine contenente il chiamante. Si tratta del percorso del file al momento della compilazione. | String |
CallerLineNumberAttribute | Numero di riga nel file di origine in cui viene chiamato il metodo. | Integer |
CallerMemberNameAttribute | Nome di una proprietà o di un metodo del chiamante. Vedere Nomi dei membri più avanti in questo argomento. | String |
CallerArgumentExpressionAttribute | Espressione utilizzata dal chiamante per un argomento. Vedere Espressioni chiamante più avanti in questo argomento. | String |
Esempio
Nell'esempio seguente viene illustrato come utilizzare gli attributi di informazioni sul chiamante. Per ogni chiamata al metodo TraceMessage
, le informazioni sul chiamante vengono sostituite come argomenti dei parametri facoltativi.
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
Osservazioni:
È sempre necessario specificare un valore esplicito per ciascun parametro facoltativo. Non è possibile applicare attributi di informazioni sul chiamante ai parametri non specificati come facoltativi.
Gli attributi di informazioni sul chiamante non restituiscono un parametro facoltativo, ma influiscono sul valore predefinito passato quando l'argomento è omesso.
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 da 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 per cui il refactoring di ridenominazione non modifica i valori String
. 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.
Nel grafico seguente vengono mostrati i nomi dei membri restituiti quando si utilizza 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. |
Espressioni chiamante
Usare System.Runtime.CompilerServices.CallerArgumentExpressionAttribute quando si desidera acquisire l'espressione usata per un argomento. È possibile che le librerie di diagnostica forniscano altri dettagli sulle espressioni passate come argomenti. Fornendo l'espressione che ha attivato la diagnostica, oltre al nome del parametro, gli sviluppatori hanno maggiori dettagli sulla condizione che ha attivato la diagnostica. Queste informazioni aggiuntive semplificano la correzione. Il metodo seguente usa CallerArgumentExpressionAttribute per visualizzare la condizione che deve essere 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
Vedi anche
- Attributi (Visual Basic)
- Attributi comuni (Visual Basic)
- Parametri facoltativi
- Programming Concepts (Visual Basic) (Concetti di programmazione (Visual Basic))