internal class B { }
internal class D : B { }
class Program {
static void Main(string[] args) {
B dToB = new D();//will execute successfully. - line 1
D bToD = (D) new B(); //will fail at runtime. - line 2
}
}
我不明白为什么从基类型实例到派生类型引用的转换/转换不被视为类型安全?为什么它不是类型安全的将基类型实例转换为派生类型对象/参考
从技术上讲,对象D包含了B的所有特性,所以它应该能够作为其基本实例的引用。不应该有其他的例外吗?像第1行应该失败,但不是第2行。
仅当我们试图从类型转换/转换为完全不同类型时,类型安全是否会出现?而在基类型实例派生类型引用的情况下是不允许的,而另一种方式是因为设计而被允许的?
谢谢!
卡菲基恩
因为B不是D,所以不能将'new B()'强制转换为'D'。D是B。 – 2014-09-05 18:38:37
每一只'狗'都是'动物',但不是每一只'动物'都是'狗' – user2711965 2014-09-05 18:39:01