这肯定很简单,但是有一段时间让我烦恼,所以希望在这里得到一些详细的解释。我知道你做的时候
BaseClass b = new DeriveClass();
b
的类型仍然是BaseClass
NOT DeriveClass
,因为从派生类到基类的隐式转换。事实上,它也是合法的
BassClass b = (BaseClass)new DeriveClass();
但编译器并不需要这样做。无论如何,我不能理解的是,在我尝试致电b.GetType()
之后,它会返回DriveClass
而不是BaseClass
。
为什么是这样?
答案 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