有沒有辦法通過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庫珀: 我沒有考慮擴展方法。一些變化可能會奏效。
這是解決這個問題的非常優雅的方法 – ohmusama 2016-06-06 22:11:58