Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
En utilisant des attributs d'appelant, vous pouvez obtenir des informations sur l'appelant pour 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 de noms System.Runtime.CompilerServices :
| Caractéristique | Descriptif | Catégorie |
|---|---|---|
| CallerFilePath | 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 |
| CallerLineNumber | Numéro de ligne dans le fichier source auquel la méthode est appelée. | Integer |
| CallerMemberName | Méthode ou nom de la propriété de l'appelant. Consultez la section Noms des membres plus loin dans cette rubrique. | String |
Exemple :
L’exemple suivant montre comment utiliser ces attributs pour tracer un appelant.
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}")
Remarques
Les attributs Info de l’appelant ne peuvent être appliqués qu’aux paramètres facultatifs. Les attributs d’informations de l’appelant entraînent l’écriture de la valeur appropriée pour chaque paramètre facultatif décoré avec un attribut d’informations de l’appelant.
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 propriété StackTrace 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 INotifyPropertyChanged lors de la 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 à l'intérieur | Résultat pour le 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 | La chaîne « .ctor » |
| Constructeur statique | La chaîne « .cctor » |
| Destructeur | La chaîne « finalize » |
| 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, niveau assembly ou attributs qui sont appliqués aux types) | Valeur par défaut du paramètre facultatif. |