Есть ли способ через System.Reflection, System.Diagnostics или другой способ получить ссылку на фактический экземпляр, который вызывает статический метод, не передавая его самому методу?
Например, что-то в этом духе
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();
}
}
Я могу получить тип, используя System.Diagnostics.StackTrace.GetFrames, но есть ли способ получить ссылку на реальный экземпляр?
Я знаю о проблемах с отражением и производительностью, а также о статических вызовах, и что это, как правило, возможно, даже почти всегда, неправильный подход к этому. Частично причина этого вопроса в том, что мне было любопытно, выполнимо ли это; в настоящее время мы передаем экземпляр.
ExecuteMethod(instance)
И я просто задавался вопросом, возможно ли это и все еще иметь доступ к экземпляру.
ExecuteMethod()
@Steve Cooper: я не рассматривал методы расширения. Некоторые варианты этого могут сработать.