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

标签 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 的构造函数中,我想打印出我所在的实际类的名称。

最佳答案

如果您只是想保持强类型以防名称更改,那么您可以这样做,而不是仅仅将其硬编码打印出来:

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

关于c# - 如何获取执行类型的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20734048/

相关文章:

c# - 惯用的 C# : when to return null and when to return NaN

python - Django - 来自抽象基类的外键

c++ - 在这种情况下,如何在基类中设计我的 switch case 函数

java - 无法从不同 jar 中的同一包访问父类(super class)的 protected 成员

c# - 在单独的解决方案中调试引用的 DLL

c# - 32 位整数的二进制 100...(31 个零)的值是多少?

C# 从文件名中删除无效字符

c# - SortedDictionary 是红黑树吗?

.net - Windows 窗体 : SelectionChanged event for TextBox class

用于音乐编程的 .NET API?