public class SomeClass
{
public void SomeMethod()
{
StackFrame frame = new StackFrame(1);
var method = frame.GetMethod();
var type = method.DeclaringType;
var name = method.Name;
}
}
Ahora vamos a decir que tiene otra clase como esta:
public class Caller
{
public void Call()
{
SomeClass s = new SomeClass();
s.SomeMethod();
}
}
nombre será "Call" y el tipo será "llamante"
ACTUALIZACIÓN Dos años más tarde, ya Todavía estoy recibiendo votos por adelantado en este
En .Net 4.5 allí ahora es una forma mucho más fácil de hacer esto. Usted puede tomar ventaja de la CallerMemberNameAttribute
Ir con el ejemplo anterior:
public class SomeClass
{
public void SomeMethod([CallerMemberName]string memberName = "")
{
Console.WriteLine(memberName); //output will be name of calling method
}
}
¡Muy limpio y al grano! – AieshaDot
Esta es la mejor solución que puede obtener, pero debe recordar que esto no necesariamente arrojará la respuesta esperada en versiones compiladas, a menos que deshabilite el método JIT en línea. –
@Greg Beech: cierto. No es un problema aquí porque no usaría la reflexión en ningún tipo de compilación de versiones en ningún caso. –