【发布时间】:2017-05-23 20:23:25
【问题描述】:
我有一个带有静态方法的类A,以及一个派生类B。您可以在A 和B 上调用Foo(),在A 中声明:
public class A
{
public static void Foo()
{
// How to get typeof(B) here if Foo called by using class B?
}
}
public class B : A
{
}
...
static class Program
{
static void Main()
{
B.Foo();
}
}
现在在Foo() 中,我如何知道Foo() 是在哪个类型上调用的?
我不能使用关键字this,因为我没有在这里创建任何对象。我已经试过了:
MethodBase.GetCurrentMethod().DeclaringType
和
MethodBase.GetCurrentMethod().ReflectedType
但他们都给我回了typeof(A),而我需要得到typeof(B)。
【问题讨论】:
-
你试过使用stacktrace吗?
-
你不能,基本上。
-
@Alfie Goodacre,Stacktrace 看起来像一个“肮脏的把戏”,所以我还没有尝试。
-
@Jon Skeet,谢谢!
-
堆栈跟踪不会有任何区别,因为尽管问题的措辞如此,这不是关于 caller(即
Program.Main),而是关于静态方法调用的目标类。
标签: c# reflection