找出调用静态方法的类型

时间:2017-05-23 09:29:28

标签: c# reflection

我有一个带有静态方法的类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)

2 个答案:

答案 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。