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

C#显式类型转换编译通过但运行抛出InvalidCastException异常问题咨询

C# 父类实例强制转换为子类实例运行报错原因分析

编译通过的原因

C#编译器对显式强制转换的校验规则仅为:检查源类型和目标类型是否处于同一继承链,存在显式转换的可能性。你代码中C类继承自B类,B类又继承自A类,二者属于同一继承链,因此语法上符合显式转换要求,IntelliSense不会提示错误,编译可以正常完成。

运行报错的原因

CLR在执行类型转换时,会校验对象的实际运行时类型,而非变量的声明类型:

  • 你代码中A a = new A()创建的对象实际类型就是A,仅包含A类自身的成员M1,完全没有B类新增的M2、C类新增的M3等成员,不满足C类型的结构要求。
  • 只有当对象的实际运行时类型本身就是目标类型,或者是目标类型的子类时,向下转换(父类转子类)才能成功。比如如下代码就是合法的:
A a = new C(); // 变量a声明类型为A,实际指向C类实例
C objC = (C)a; // 运行正常,不会抛出异常

你代码中的A实例本身不是C类或其子类的实例,因此运行时抛出InvalidCastException异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:30:01