我有一个静态类,从另一个类的实例调用哪些方法。如何在不添加方法参数的情况下知道哪个实例调用方法 ?
示例:
static class SomeStaticClass
{
public static void SomeGreatMethod (/*NO PARAMETERS*/)
{
LittleClass caller = //How to obtain caller instance here?
}
}
class LittleClass
{
public void SomeMethod ()
{
//some code
SomeStaticClass.SomeGreatMethod (/*NO PARAMETERS*/);
}
}
答案 0 :(得分:2)
您可以通过创建堆栈跟踪找出哪个类包含调用方法 - 尽管内联可能会弄乱它。
除非您使用调试API,否则无法找出正在进行调用的实例。
如果你需要 这些东西,你可能遇到了设计问题。框架的某些区域做了类似于强制安全的事情,但这是一种非常罕见的情况。通常,如果您需要SomeGreatMethod
中的信息,则只需将其作为调用的一部分提供 - 或者将其作为非静态类中的实例方法,并提供适当的上下文有关施工的信息。
答案 1 :(得分:0)
您可以获得StackFrame并从中读取整个堆栈跟踪
答案 2 :(得分:0)
看看这里,你需要使用callstack
http://www.csharp-examples.net/reflection-calling-method-name/
答案 3 :(得分:0)
有时候我会用这个
private static Type GetCallingMethodHolderType()
{
const int iCallDeepness = 0; //can vary this ...
System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(false);
System.Diagnostics.StackFrame sframe = stack.GetFrame(iCallDeepness);
return sframe.GetMethod().ReflectedType; //This will return a TYPE which holds the method.
}
编辑
我编辑了帖子,以便返回保存调用方法的对象的TYPE。 Instance ,就像你要求的那样,imo,它是不可能获得的。
应该为你工作。