Partager via


Informations relatives à l'appelant (C# et Visual Basic)

À l'aide des attributs d'informations de l'appelant, vous pouvez obtenir des informations sur l'appellant 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 d'accès 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.Voir Member Names plus loin dans cet article.

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 substituées comme arguments aux paramètres optionnels.

' Imports System.Runtime.CompilerServices
' Imports System.Diagnostics

Private Sub DoProcessing()
    TraceMessage("Something happened.")
End Sub

Public Sub TraceMessage(message As String,
        <CallerMemberName> Optional memberName As String = Nothing,
        <CallerFilePath> Optional sourcefilePath As String = Nothing,
        <CallerLineNumber()> Optional sourceLineNumber As Integer = 0)

    Trace.WriteLine("message: " & message)
    Trace.WriteLine("member name: " & memberName)
    Trace.WriteLine("source file path: " & sourcefilePath)
    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
// using System.Runtime.CompilerServices
// using System.Diagnostics;

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string sourceFilePath = "",
        [CallerLineNumber] int sourceLineNumber = 0)
{
    Trace.WriteLine("message: " + message);
    Trace.WriteLine("member name: " + memberName);
    Trace.WriteLine("source file path: " + sourceFilePath);
    Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31

Remarques

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'appel aux paramètres qui ne sont pas spécifiés comme facultatifs.

Les attributs d'informations de l'appelant ne rendent pas de 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 d'appel 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 obscurcissement.

Hh534540.collapse_all(fr-fr,VS.110).gifNoms du membre

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

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

  • Implémenter l'interface INotifyPropertyChanged lors de l'association de données.Cette interface permet à la propriété d'un objet pour signaler un contrôle dépendant que la propriété a été modifiée, afin que le 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, propriété, ou l'événement dont l'appel est originaire.

Constructeur

La chaîne « .ctor »

Constructeurs statiques.

La chaîne « .cctor »

Destructor

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 conteneur (par exemple, niveau assembly ou attributs qui sont appliqués aux types)

Définit la valeur par défaut du paramètre.

Voir aussi

Référence

Attributs (C# et Visual Basic)

Concepts

Attributs courants (C# et Visual Basic)

Paramètres facultatifs (Visual Basic)

Arguments nommés et facultatifs (Guide de programmation C#)

Autres ressources

Concepts de programmation