【发布时间】:2013-07-31 03:47:10
【问题描述】:
我知道已经发布了一些与同一主题相关的问题,但我看到了不同的答案,所以我很困惑哪个答案是正确的。
在下面的链接中,人们提到不能向下转换 Convert/Cast base type to Derived type
在下面的这个链接中,人们提到只有派生类是基类的实例时才可能进行向下转换 downcast and upcast
我做了一个小实验,并使用直接转换在一个迷你项目(C#)上实现了向下转换,例如: DerivedClass dc = (DerivedClass) baseClass 没有检查 DerivedClass 是否是 BaseClass 的实例,令我惊讶的是,它运行良好,完全没有错误,为什么人们说向下转换是不可能的?
所以我的问题是,向下转换真的不可能吗?为什么人们似乎对这个话题有不同的答案?毕竟哪一个是真正的答案?有人可以更详细地解释一下吗?
示例代码:
public class Order { }
public class PurchaseOrder : Order { // some new properties here for PurchaseOrder}
public static PurchaseOrder GetOrder()
{
Order order = new Order();
return (PurchaseOrder)order;
}
【问题讨论】:
-
您在更新中发布的代码 compiles 没有错误,但是当 run 将失败并返回
InvalidCastException. -
我已经使用上面的代码很长时间了,我还没有看到任何错误。好奇怪……
-
如果你真的使用 GetOrder() 之前它必须抛出 InvalidCastException。
标签: c# oop inheritance downcast