Partager via


Informations de l’appelant (Visual Basic)

En utilisant des attributs d’informations de l’appelant, vous pouvez obtenir des informations sur l’appelant vers une méthode. Vous pouvez obtenir le chemin du fichier du code source, le numéro de ligne dans le code source et le nom du membre de l’appelant. Ces informations sont utiles pour le suivi, le débogage et la création d’outils de diagnostic.

Pour obtenir ces informations, vous utilisez des attributs appliqués aux paramètres facultatifs, chacun ayant une valeur par défaut. Le tableau suivant répertorie les attributs d’informations de l’appelant définis dans l’espace System.Runtime.CompilerServices de noms :

Caractéristique Descriptif Catégorie
CallerFilePathAttribute Chemin d’accès complet du fichier source qui contient l’appelant. Il s’agit du chemin d’accès au fichier au moment de la compilation. String
CallerLineNumberAttribute Numéro de ligne dans le fichier source auquel la méthode est appelée. Integer
CallerMemberNameAttribute Nom de la méthode ou de la propriété de l’appelant. Consultez les noms des membres plus loin dans cette rubrique. String
CallerArgumentExpressionAttribute Expression utilisée par l’appelant pour un argument. Consultez les expressions de l’appelant plus loin dans cette rubrique. String

Exemple :

L’exemple suivant montre comment utiliser les attributs Info de l’appelant. Sur chaque appel à la TraceMessage méthode, les informations de l’appelant sont substituées en tant qu’arguments aux paramètres facultatifs.

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  

Remarques

Vous devez spécifier une valeur par défaut explicite pour chaque paramètre facultatif. Vous ne pouvez pas appliquer d’attributs d’informations de l’appelant aux paramètres qui ne sont pas spécifiés comme facultatifs.

Les attributs Info de l’appelant ne rendent pas un paramètre facultatif. Au lieu de cela, ils affectent la valeur par défaut passée lorsque l’argument est omis.

Les valeurs d’informations de l’appelant sont émises en tant que littéraux dans le langage intermédiaire (IL) au moment de la compilation. Contrairement aux résultats de la StackTrace propriété pour les exceptions, les résultats ne sont pas affectés par l’obfuscation.

Vous pouvez fournir explicitement les arguments facultatifs pour contrôler les informations de l’appelant ou masquer les informations de l’appelant.

Noms de membres

Vous pouvez utiliser l’attribut CallerMemberName pour éviter de spécifier le nom du membre comme String argument de la méthode appelée. À l’aide de cette technique, vous évitez le problème lié au fait que renommer la refactorisation ne modifie pas les String valeurs. Cet avantage est particulièrement utile pour les tâches suivantes :

  • Utilisation de routines de suivi et de diagnostic.

  • Implémentation de l’interface lors de la INotifyPropertyChanged liaison de données. Cette interface permet à la propriété d’un objet d’avertir un contrôle lié que la propriété a changé, afin que le contrôle puisse afficher les informations mises à jour. Sans l’attribut CallerMemberName , vous devez spécifier le nom de propriété en tant que littéral.

Le graphique suivant montre les noms de membres retournés lorsque vous utilisez l’attribut CallerMemberName .

Les appels se produisent dans Résultat du nom du membre
Méthode, propriété ou événement Nom de la méthode, de la propriété ou de l’événement à partir duquel l’appel provient.
Constructeur Chaîne .ctor "
Constructeur statique Chaîne .cctor"
Destructeur Chaîne « Finalise »
Opérateurs ou conversions définis par l’utilisateur Nom généré pour le membre, par exemple « op_Addition ».
Constructeur d’attribut Nom du membre auquel l’attribut est appliqué. Si l’attribut est un élément au sein d’un membre (tel qu’un paramètre, une valeur de retour ou un paramètre de type générique), ce résultat est le nom du membre associé à cet élément.
Aucun membre contenant (par exemple, assembly-level ou attributes qui sont appliqués aux types) Valeur par défaut du paramètre facultatif.

Expressions de l’appelant

Vous utilisez le System.Runtime.CompilerServices.CallerArgumentExpressionAttribute moment où vous souhaitez capturer l’expression utilisée pour un argument. Les bibliothèques de diagnostics peuvent fournir plus de détails sur les expressions passées en tant qu’arguments. En fournissant l’expression qui a déclenché le diagnostic, en plus du nom du paramètre, les développeurs ont plus de détails sur la condition qui a déclenché le diagnostic. Ces informations supplémentaires facilitent la correction. La méthode suivante utilise la CallerArgumentExpressionAttribute condition pour afficher la condition qui doit être 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

Voir aussi