Informations de l’appelant
À 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 liste les attributs Caller Info qui sont définis dans l’espace de noms System.Runtime.CompilerServices :
Attribut | Description | Type |
---|---|---|
CallerFilePath | Chemin d’accès complet du fichier source qui contient l’appelant. C’est le chemin du fichier au moment de la compilation. | String |
CallerLineNumber | Numéro de ligne dans le fichier source dans lequel la méthode est appelée. | Integer |
CallerMemberName | Méthode ou nom de la propriété de l'appelant. Consultez la section Noms de membre plus loin dans cette rubrique. | String |
Exemple
L’exemple suivant montre comment vous pouvez utiliser ces attributs pour suivre 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}")
Notes
Les attributs Caller Info peuvent être appliqués uniquement aux paramètres facultatifs. Les attributs Caller Info indiquent au compilateur d’écrire la valeur appropriée pour chaque paramètre facultatif décoré d’un attribut Caller Info.
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.
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 pendant 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 montre les noms des membres qui sont renvoyés quand 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. |