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

C# 如何获取执行类型的名称?,c#,.net,inheritance,C#,.net,Inheritance,我正在尝试确定执行类型的名称。我在基类中执行this.GetType,它返回调用类的名称(例如,从基类继承的类)。如何获取实际执行此.GetType()的类的名称 考虑以下代码 class MyBaseClass() : SomeEvenHigherClass { public MyBaseClass() { Debug.WriteLine(this.GetType().Name); } } class ChildClass: MyBaseClass { }

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

考虑以下代码

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

class ChildClass: MyBaseClass {

}

void Main() {
    var cc = new ChildClass();
}
在MyBaseClass的构造函数中,我想打印出我所在的实际类的名称。

尝试以下操作:

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

如果您只想保持强类型,以防名称更改,那么您可以执行以下操作,而不只是将其硬编码打印出来:

// 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
{
}
使用


这将静态地获得MyBaseClass的名称。它甚至是类型安全的,因此当您稍后重命名类(使用一些自动重构)时,它将返回类的新名称

为什么不能直接打印
MyBaseClass
。。?您创建的实际实例是
ChildClass
,因此
this
将引用该类。您的对象不知道分配给它的变量。@Jeroenvanevel这是一个人为的例子。有很多类可以从中继承。@AngryHacker如果您担心强类型,那么可能会将其更改为
typeof(MyBaseClass)。Name
将是一种方法。这样,当您通过VisualStudio中的重命名选项重命名基类时,您将始终打印出正确的名称。为什么要这样做?你的目标是什么?我想他想要他所在的班级类型。这只会给出它当前继承的基类型。啊,我误解了这个问题。实际上,在这个特定的实例中,BaseType确实返回了正确的值(MyBaseClass)。根据MS文档,如果类型为泛型,则可能需要进行额外的测试。@Competable\u tech是的,但如果中间存在继承,则不会进行测试,比如说他想在某个更高的类中执行同样的操作。
MethodBase.GetCurrentMethod()。DeclaringType
完成了这项任务。谢谢你。
Debug.WriteLine(typeof(MyBaseClass).Name);