在基本静态类中获取继承的调用者类型名称

时间:2011-01-19 14:31:39

标签: c# .net inheritance

我有:

class parent
{
    public static string GetTypeName()
    { 
        /* here i want to get the caller's type
        So child.GetTypeName() should display "child" */
    }            
}     

class child : parent { }

static void Main()
{
    Console.WriteLine(child.GetTypeName());
}

是否有可能以某种方式在基类中获取调用者的类型?

2 个答案:

答案 0 :(得分:9)

除非您将调用者传递给方法(作为参数)或遍历堆栈帧以获取调用者,否则无法实现。

当通过parent类型调用child的静态方法时,编译器会将parent替换为child。例如,这是调用child.GetTypeName()的IL代码:

IL_0002:  call   class [mscorlib]System.Type Tests.Program/parent::GetTypeName()

答案 1 :(得分:0)

我相信this.GetType()会这样做。但目前无法检查。

(假设你想在父方法中输入孩子的类型。)