Déterminer quelle classe a appelé une méthode?

J’ai une application en tête, mais je ne sais pas comment faire. Disons que j’ai une méthode accessible au public dans un fichier DLL qui ne prend aucun paramètre. Est-il possible pour cette méthode de savoir comment l’appeler? Peut-il dire s’il a été appelé à partir d’un contexte statique ou instancié? D’une classe spécifique? Que peut savoir une méthode sur la façon dont elle est appelée?

Vous pouvez obtenir les informations sur l’appelant à partir d’une trace de stack:

StackTrace stackTrace = new StackTrace(); MethodBase methodBase = stackTrace.GetFrame(1).GetMethod(); 

Il est possible pour cette méthode de savoir comment cela s’appelle:

 ssortingng typeName = methodBase.DeclaringType.Name; ssortingng methodName = methodBase.Name; 

Il peut dire s’il a été appelé depuis un contexte statique ou instancié:

 bool isStaticCall = methodBase.IsStatic 

A partir d’une classe spécifique:

 bool isGeneric = methodBase.DeclaringType.IsGenericType; 

Vous pouvez simplement faire ceci:

 var callingClass = new StackFrame(1).GetMethod().ReflectedType; 

Le 1 indique au constructeur de sauter la méthode en cours d’exécution.

Si votre programme dispose de privilèges suffisants, il peut construire une StackTrace et l’examiner image par image pour déterminer le destinataire. Cela vous donnera la méthode d’appel, la classe d’appel, et ainsi de suite.