首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么GetType()在将派生类显式转换为基类之后返回派生类?

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

Stack Overflow用户
提问于 2014-09-20 20:01:40
回答 1查看 267关注 0票数 0

这当然很简单,但困扰了我一段时间,所以希望在这里得到一些详细的解释。我知道当你这么做

代码语言:javascript
运行
复制
BaseClass b = new DeriveClass();

b的类型仍然是BaseClass而不是DeriveClass,因为从派生类到基类的隐式强制转换。

代码语言:javascript
运行
复制
BassClass b = (BaseClass)new DeriveClass();

但是编译器不需要这样做。无论如何,我不明白的是,当我试图调用b.GetType()时,它返回的是DriveClass而不是BaseClass

为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-20 20:05:36

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

获取当前实例的类型。

msdn上的代码示例:

代码语言:javascript
运行
复制
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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25952798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档