You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Person类型变量指向Student实例时GetType为何返回Student类型

问题解答

该现象是C#中编译时类型和运行时类型分离的正常表现,GetType()方法的设计逻辑就是返回对象的运行时实际类型,和变量的声明类型无关。

核心概念说明

  • 编译时类型:指声明变量时指定的类型,属于编译期的静态约束。代码中Person p就代表变量p的编译时类型为Person,编译器只会允许你通过p调用Person类中定义的成员,如果你尝试调用Student类独有的成员会直接编译报错。
  • 运行时类型:指变量实际指向的堆内存中对象的真实类型,是程序运行时的动态类型。示例代码中先实例化了Student对象,再把这个实例赋值给父类Person类型的变量,本质上只是做了类型的隐式向上转换,底层存储的实例本身还是Student类型,没有发生任何变化。

GetType()方法特性

GetType()是继承自object基类的方法,它的实现逻辑就是读取实例对象的类型元数据,返回的永远是实例的运行时真实类型,不会受变量声明类型的影响。
如果需要获取变量的编译时类型,应该使用typeof运算符,示例如下:

Console.WriteLine(typeof(Person)); // 输出Person

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:09:01