为什么GetType()在将derive类显式地转换为基类之后返回派生类?

时间:2014-09-20 20:01:41

标签: c# inheritance

这肯定很简单,但是有一段时间让我烦恼,所以希望在这里得到一些详细的解释。我知道你做的时候

BaseClass b = new DeriveClass();

b的类型仍然是BaseClass NOT DeriveClass,因为从派生类到基类的隐式转换。事实上,它也是合法的

BassClass b = (BaseClass)new DeriveClass();

但编译器并不需要这样做。无论如何,我不能理解的是,在我尝试致电b.GetType()之后,它会返回DriveClass而不是BaseClass。 为什么是这样?

1 个答案:

答案 0 :(得分:1)

GetType()总是返回实例的当前类型(在运行时检查,而不是编译时)。它写在msdn

  

获取当前实例的Type。

msdn上的代码示例:

MyBaseClass myBase = new MyBaseClass();
MyDerivedClass myDerived = new MyDerivedClass();
object o = myDerived;
MyBaseClass b = myDerived;

Console.WriteLine("mybase: Type is {0}", myBase.GetType());
Console.WriteLine("myDerived: Type is {0}", myDerived.GetType());
Console.WriteLine("object o = myDerived: Type is {0}", o.GetType());
Console.WriteLine("MyBaseClass b = myDerived: Type is {0}", b.GetType());

// The example displays the following output:
//    mybase: Type is MyBaseClass
//    myDerived: Type is MyDerivedClass
//    object o = myDerived: Type is MyDerivedClass
//    MyBaseClass b = myDerived: Type is MyDerivedClass