我正在尝试确定执行类型的名称。我在我的基类中执行this.GetType,它返回调用类的名称(例如,从我的基类继承的类)。如何获取this.GetType()实际执行的类的名称?
请考虑以下代码。
class MyBaseClass() : SomeEvenHigherClass {
public MyBaseClass() {
Debug.WriteLine(this.GetType().Name);
}
}
class ChildClass: MyBaseClass {
}
void Main() {
var cc = new ChildClass();
}
在MyBaseClass的构造函数中,我想打印出我所在的实际类的名称。
答案 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的名称。它甚至是类型安全的,所以当你稍后重命名你的类(使用一些自动重构)时,它将返回该类的新名称。