¿Hay alguna forma a través de System.Reflection, System.Diagnostics u otra para obtener una referencia a la instancia real que está llamando a un método estático sin pasarlo al método en sí?¿Puedo obtener la instancia de llamada desde un método mediante reflexión/diagnóstico?
Por ejemplo, algo a lo largo de estas líneas
class A
{
public void DoSomething()
{
StaticClass.ExecuteMethod();
}
}
class B
{
public void DoSomething()
{
SomeOtherClass.ExecuteMethod();
}
}
public class SomeOtherClass
{
public static void ExecuteMethod()
{
// Returns an instance of A if called from class A
// or an instance of B if called from class B.
object caller = getCallingInstance();
}
}
puedo conseguir el tipo usando System.Diagnostics.StackTrace.GetFrames, pero ¿hay una manera de obtener una referencia a la instancia real?
Soy consciente de los problemas de reflexión y rendimiento, así como de las llamadas estáticas a estáticas, y de que esto es generalmente, quizás incluso casi univeralmente, no la forma correcta de abordar esto. Parte de la razón de esta pregunta es que tenía curiosidad de si era factible; estamos pasando actualmente en la instancia.
ExecuteMethod(instance)
Y me preguntaba si esto era posible y aún así ser capaz de acceder a la instancia.
ExecuteMethod()
@Steve Cooper: que no había considerado métodos de extensión. Alguna variación de eso podría funcionar.
Esta es una forma muy elegante de resolver este problema – ohmusama