Je crois que tu n'as pas très bien compris le mot clef static.
Une méthode statique n'appartient pas à un objet, mais à la classe elle-même.
Il n'existe donc pas d'instance appelant cette méthode.
Noramlement, pour appeler une méthode statique, on ne fait pas
ObjetA.maMethodeStatique(params);
mais
TypeA.maMethodeStatique(params);
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Je me trompe peut-être, mais je ne pense pas que ce soit possible.
Si ta méthode statique n'est pas surchargée, c'est la méthode de la classe de base qui est directement appelée, et je ne crois aps que tu puisses rettrouver cette info.
J'ai jeté un coup d'oeil dans System.Reflection.MethodBase et dans System.Diagnostic.StackTrace, mais sans succès.
Mais comme je l'ai déjà dis, je me trompe peut-être
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Si on peut, et justement avec ce dont SharpMao a parler mais bon, je me demande si c'est vraiment une bonne idée, surtout si l'utilisation de la méthode est intensive.
Sans parler du fait que le type "Types" aura ainsi une dépendance directe sur le type "TypeA", ce qui du coup est un peu (beaucoup) moche.
Bref, à titre informatif (à stabiliser etc) (et donner une description compréhensible :p) :
/// <summary>
/// Obtient l'instance de <see cref="Type"/> représentant le type déclarant la méthode appelant l'appelant de <see cref="GetCallerType"/>.
/// </summary>
/// <returns></returns>
private static Type GetCallerType()
{
Type callingType = null;
try
{
// TODO : Faire une gestion d'erreur appropriée à l'utilisation
// TODO : valider les indexes etc etc
// Obtention de la stack
StackTrace stack = new StackTrace();
// Obtention de la frame qui nous intéresse : 2, comme nous voulons l'appelant de notre appelant
StackFrame callerFrame = stack.GetFrame(2);
// Obtention de la méthode appelante
MethodBase callingMethod = callerFrame.GetMethod();
// Récupération de l'instance de Type représentant le type déclarant la méthode
callingType = callingMethod.DeclaringType;
}
catch
{
// TODO : Faire une gestion d'erreur appropriée à l'utilisation
}
return callingType;
}
...
Type callingMethodDeclaringType = GetCallerType();
if (callingMethodDeclaringType == typeof(TypeA))
{
// yep
}
else
{
// non
}