Réponses
Trop de publicités?public class SomeClass
{
public void SomeMethod()
{
StackFrame frame = new StackFrame(1);
var method = frame.GetMethod();
var type = method.DeclaringType;
var name = method.Name;
}
}
Maintenant, disons que vous avez une autre classe comme ceci:
public class Caller
{
public void Call()
{
SomeClass s = new SomeClass();
s.SomeMethod();
}
}
le nom sera "Appel" et de type "Caller"
Mise à JOUR Deux ans plus tard, car je suis encore en train upvotes sur ce
Dans .Net 4.5, il existe désormais un moyen beaucoup plus facile de le faire. Vous pouvez profiter de l' CallerMemberNameAttribute
Va avec l'exemple précédent:
public class SomeClass
{
public void SomeMethod([CallerMemberName]string memberName = "")
{
Console.WriteLine(memberName); //output will me name of calling method
}
}
Oui, en principe, il est possible, mais il ne vient pas gratuitement.
Vous devez créer un StackTrace, et puis vous pouvez jeter un oeil à de StackFrame de la pile des appels.
Techniquement, vous pouvez utiliser StackTrace, mais c'est très lent et ne sera pas vous donner les réponses que vous attendez beaucoup de temps. C'est parce que pendant les versions release optimisations peuvent se produire qui va supprimer certains appels de méthode. Par conséquent, vous ne pouvez pas être sûr dans la version que stacktrace est "correct" ou non.
Vraiment, il n'y a pas infaillible ou moyen rapide de le faire en C#. Vous devez vraiment vous demander pourquoi vous avez besoin et comment vous pouvez l'architecte de votre application, donc vous pouvez faire ce que vous voulez sans connaître la méthode qui l'a appelé.