Share via


Informations relatives à l’appelant (Visual Basic)

À l'aide des attributs d'informations de l'appelant, vous pouvez obtenir des informations sur l'appelant d'une méthode. Vous pouvez obtenir le chemin d'accès du fichier de code source, le numéro de ligne dans le code source, puis le nom du membre de l'appelant. Ces informations sont utiles pour suivre, déboguer, et créer des outils de diagnostic.

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

Attribut Description Type
CallerFilePathAttribute Chemin d’accès complet du fichier source qui contient l’appelant. C’est le chemin du fichier au moment de la compilation. String
CallerLineNumberAttribute Numéro de ligne dans le fichier source dans lequel la méthode est appelée. Integer
CallerMemberNameAttribute Méthode ou nom de la propriété de l'appelant. Consultez Noms de membres, plus loin dans cette rubrique. String
CallerArgumentExpressionAttribute Expression utilisée par l’appelant pour un argument. Consultez expressions appelantes plus loin dans cette rubrique. String

Exemple

L'exemple suivant indique comment utiliser des attributs d'informations de l'appelant. À chaque appel à la méthode TraceMessage, les informations d'appel sont remplacées par des arguments pour les paramètres optionnels.

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  

Notes

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

Les attributs d'informations de l'appelant ne rendent pas un paramètre facultatif. À la place, ils affectent la valeur par défaut qui est passée si l'argument est oublié.

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

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

Noms de membres

Vous pouvez utiliser l'attribut CallerMemberName pour éviter de spécifier le nom du membre comme argument de String à la méthode appelée. Vous évitez ainsi le problème que la refactorisation de changement de nom ne modifie pas les valeurs String. Cet avantage est particulièrement utile pour les tâches suivantes :

  • Utilisation du traçage et des programmes de diagnostic.

  • Implémentation de l'interface INotifyPropertyChanged lors de la liaison de données. Cette interface permet à la propriété d'un objet de signaler à un contrôle dépendant que la propriété a été modifiée, afin que ce contrôle puisse afficher les informations mises à jour. Sans attribut CallerMemberName, vous devez spécifier le nom de la propriété comme littéral.

Le graphique suivant affiche les noms des membres qui sont retournés lorsque vous utilisez l'attribut CallerMemberName.

Les appels se produisent à l'intérieur Résultat de nom de membre
Méthode, propriété ou événement Le nom de la méthode, la propriété ou l'événement dont l'appel est originaire.
Constructeur La chaîne « .ctor »
Constructeur statique La chaîne « .cctor »
Destructeur La chaîne « finalize »
Opérateurs définis par l'utilisateur ou conversions Le nom généré pour le membre, par exemple, « op_Addition ».
Constructeur d'attribut Le nom du membre auquel l'attribut est appliqué. Si l'attribut est un élément dans un membre (tel qu'un paramètre, une valeur de retour, ou un paramètre de type générique), le résultat est le nom du membre qui est associé à cet élément.
Aucun membre contenant (par exemple, niveau assembly ou attributs qui sont appliqués aux types) Valeur par défaut du paramètre optionnel.

Expressions de l’appelant

Vous utilisez le System.Runtime.CompilerServices.CallerArgumentExpressionAttribute lorsque vous souhaitez capturer l’expression utilisée pour un argument. Les bibliothèques de diagnostic peuvent fournir plus d’informations 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 l' CallerArgumentExpressionAttribute 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