想象一下,我有一个静态类和一个静态方法。它必须由10个不同的类访问。但静态类如何知道谁调用它:(
这是一个面试问题....请正确地改写并回答我,我是新人:(
答案 0 :(得分:2)
由于C#没有合适的元对象系统,我所知道的唯一方法是通过反射。以下想法应该提出这个想法:
public static string GetCaller()
{
var trace = new StackTrace(2);
var frame = trace.GetFrame(0);
var caller = frame.GetMethod();
var callingClass = caller.DeclaringType.Name;
var callingMethod = caller.Name;
return String.Format("Called by {0}.{1}", callingClass, callingMethod);
}
答案 1 :(得分:1)
我会尝试以下方法:
public class ParentClass
{
}
public class ChildClass : ParentClass
{
}
public static class StaticClass
{
public static void SomeMethod(ParentClass d)
{
var t = d.GetType();
}
}
public class StaticChildren
{
public void Children()
{
var p = new ChildClass();
StaticClass.SomeMethod(p);
}
}
传递一个实例是最简单的,你可以在这里做。
答案 2 :(得分:0)
您可以使用stracktace来找出谁调用静态方法!
class Foo
{
public void static staticMethod()
{
// here i want to know who called me!
StackTrace st = new StackTrace();
...
}
}
class Bar
{
public void Bar()
{
Foo.staticMethod();
}
}
答案 3 :(得分:0)
在这些情况下,您可以使用反射。
在这些链接下查找有关反射的更多信息: http://www.csharp-examples.net/reflection-calling-method-name/
http://msdn.microsoft.com/en-us/library/ms173183(v=vs.80).aspx
答案 4 :(得分:0)
如果方法的功能取决于谁调用它,那么设计可能不是很好。我会引入新的参数。
出于调试目的,是否有堆栈跟踪?