.net Get Calling Class Name

4 min read Jun 03, 2024
.net Get Calling Class Name

Obtenir le nom de la classe appelante en .NET

Obtenir le nom de la classe qui appelle une méthode est une tâche courante dans la programmation .NET. Cela peut être utile pour le débogage, la journalisation ou la mise en œuvre de modèles de conception tels que le modèle de responsabilité.

Méthode 1: Utiliser le type de l'objet appelant

La méthode la plus simple pour obtenir le nom de la classe appelante consiste à utiliser le type de l'objet appelant. Vous pouvez accéder au type de l'objet appelant en utilisant la propriété GetType().

public static void MyMethod()
{
    // Obtenir le type de l'objet appelant
    Type callingType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;

    // Afficher le nom de la classe appelante
    Console.WriteLine("Classe appelante : " + callingType.Name);
}

Méthode 2: Utiliser le traçage de pile

Si vous souhaitez obtenir le nom de la classe qui appelle la méthode actuelle dans la pile d'appels, vous pouvez utiliser la propriété StackTrace de la classe System.Diagnostics.StackTrace.

public static void MyMethod()
{
    // Créer un objet StackTrace
    StackTrace stackTrace = new StackTrace();

    // Obtenir le nom de la classe qui a appelé la méthode actuelle
    string callingClassName = stackTrace.GetFrame(1).GetMethod().DeclaringType.Name;

    // Afficher le nom de la classe appelante
    Console.WriteLine("Classe appelante : " + callingClassName);
}

Remarque: La méthode GetFrame(1) renvoie le trame qui a appelé la méthode actuelle, ce qui correspond à la classe appelante.

Méthode 3: Utiliser un attribut personnalisé

Une troisième méthode consiste à créer un attribut personnalisé qui stocke le nom de la classe appelante. Cet attribut peut être appliqué à une méthode et utilisé pour récupérer le nom de la classe appelante au moment de l'exécution.

// Attribut personnalisé
[AttributeUsage(AttributeTargets.Method)]
public class CallingClassNameAttribute : Attribute
{
    public string CallingClassName { get; private set; }

    public CallingClassNameAttribute(string callingClassName)
    {
        CallingClassName = callingClassName;
    }
}

// Méthode avec attribut
[CallingClassName("CallingClass")]
public static void MyMethod()
{
    // Obtenir le nom de la classe appelante de l'attribut
    Type callingType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
    string callingClassName = callingType.GetCustomAttributes(typeof(CallingClassNameAttribute), false)
        .Cast()
        .FirstOrDefault()?.CallingClassName;

    // Afficher le nom de la classe appelante
    Console.WriteLine("Classe appelante : " + callingClassName);
}

Conclusion:

Ces trois méthodes permettent d'obtenir le nom de la classe appelante en .NET. La meilleure méthode à utiliser dépendra de vos besoins spécifiques. La méthode 1 est la plus simple, tandis que la méthode 2 offre plus de flexibilité. La méthode 3 peut être utile pour des cas spécifiques où vous souhaitez stocker le nom de la classe appelante dans l'attribut de la méthode.

Featured Posts