2
votes

Comment connaître la classe d'appelant C #

J'ai la structure de classe ci-dessous. La classe A est appelée depuis le constructeur des classes B et C.

Class A
{
    A()
}

Class B
{
    B()
    {
        A();
    }
}

Class C
{
    C()
    {
        A();
    }
}

Y a-t-il un moyen de savoir si l'appel à A () vient de B () ou C ()? Je ne veux passer aucun objet dans le constructeur.


2 commentaires

Cela peut être utile: stackoverflow.com/a/1375429/6299857


Pas directement. C'est probablement une mauvaise pratique de faire dépendre le comportement de A de la classe qui l'utilise - la prochaine fois que vous voudrez utiliser A d'une classe totalement différente, vous aurez une surprise. Il est préférable de transmettre toutes les entrées via des paramètres au constructeur, afin que le fonctionnement de A soit évident et qu'il puisse être facilement utilisé par d'autres classes (réutilisabilité!).


3 Réponses :



3
votes

Cela a fonctionné pour moi

var mth = new StackTrace().GetFrame(1).GetMethod();
var cls = mth.ReflectedType.Name;


0 commentaires

-1
votes

Vous avez besoin de CallerMemberNameAttribute ou CallerFilePathAttribute . Veuillez consulter la documentation de Microsoft pour plus de détails https://docs.microsoft.com/ fr-fr / dotnet / csharp / guide-de-programmation / concepts / informations sur l'appelant

CallerMemberName is CallFirstClass. Calling from D:\Development\WpfApp1\WpfApp1\SecondClass.cs

la sortie dans CallFirstClass () serait comme ceci

public class FirstClass
{
     public string Run([CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "")
    {
        return $"CallerMemberName is {memberName}. Calling from {sourceFilePath}";
    }
}

public class SecondClass
{
    public string CallFirstClass()
    {
        var firstClass = new FirstClass();
        return firstClass.Run();
    }
}


0 commentaires