我有一个带有静态方法的类A
和一个派生类B
。您可以在Foo()
和A
上致电A
中声明的B
:
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)
。
答案 0 :(得分:0)
我不确定您想要达到的目标,并同意您可能以不同的方式处理这些意见的评论。说到这一点,你能用通用基类做你需要的吗?
public class AB<T>
{
public static void Foo()
{
Console.WriteLine(typeof(T));
}
}
public class A : AB<A> { }
public class B : AB<B> { }
A.Foo(); // A
B.Foo(); // B
答案 1 :(得分:0)
在这种情况下,无法在静态方法Foo()内部获取typeof(B)。可能的解决方案是在Foo方法中使用参数。
感谢@Jon Skeet和@CodeCaster。