为什么GetType()在将派生类显式转换为基类后返回派生类
本文关键字:派生 基类 返回 显式转换 GetType 为什么 | 更新日期: 2023-09-27 18:23:37
这当然很简单,但会困扰我一段时间,所以希望在这里得到一些详细的解释。我知道当你做的时候
BaseClass b = new DeriveClass();
由于从派生类到基类的隐式转换,b
的类型仍然是BaseClass
NOT DeriveClass
。事实上,做也是合法的
BassClass b = (BaseClass)new DeriveClass();
但编译器不需要这样做。无论如何,我不明白的是,在这个强制转换之后,当我尝试调用b.GetType()
时,它会返回DriveClass
而不是BaseClass
为什么会这样?
GetType()
始终返回实例的当前类型(在运行时检查,而不是在编译时检查)。它写在msdn:上
获取当前实例的类型。
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