如何获取执行类型的名称?

时间:2013-12-22 21:05:11

标签: c# .net inheritance

我正在尝试确定执行类型的名称。我在我的基类中执行this.GetType,它返回调用类的名称(例如,从我的基类继承的类)。如何获取this.GetType()实际执行的类的名称?

请考虑以下代码。

class MyBaseClass() : SomeEvenHigherClass {
    public MyBaseClass() {
        Debug.WriteLine(this.GetType().Name);
    }
}

class ChildClass: MyBaseClass {

}

void Main() {
    var cc = new ChildClass();
}

在MyBaseClass的构造函数中,我想打印出我所在的实际类的名称。

3 个答案:

答案 0 :(得分:2)

如果您只想在名称发生变化的情况下保持强力输入,那么您可以执行此操作,而不是仅将其打印出硬编码:

// When using the rename tool for 'MyBaseClass' in Visual Studio,
// it will still be printing out the right value.
Debug.WriteLine(typeof(MyBaseClass).Name);

另一种解决方法可能是:

public MyBaseClass()
{
    var m = System.Reflection.MethodBase.GetCurrentMethod();
    Console.WriteLine(m.DeclaringType.Name);
}

如果您只关心当前基本类型,那么您可以选择Aaron Palmer的答案,  但是在下列情况下结果可能不是你想要的:

public class MyBaseClass
{
    public MyBaseClass()
    {
        var type = this.GetType();
        Debug.WriteLine(type.BaseType.Name);
        // If this was called by ChildClass it would print MyBaseClass2
    }
}

public class MyBaseClass2 : MyBaseClass
{
}

public class ChildClass : MyBaseClass2
{
}

答案 1 :(得分:0)

试试这个:

Debug.WriteLine(this.GetType().BaseType.Name);

答案 2 :(得分:0)

使用

Debug.WriteLine(typeof(MyBaseClass).Name);

这将静态地为您提供MyBaseClass的名称。它甚至是类型安全的,所以当你稍后重命名你的类(使用一些自动重构)时,它将返回该类的新名称。