Есть ли способ через 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()
@ Стив Купер:
Я не рассматривал методы расширения. Некоторые варианты этого могут сработать.