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行。
只有当我们尝试从一种类型转换/转换为完全不同的类型时,类型安全是否会出现?如果基类型实例到派生类型引用是不允许的,另一种方式是允许的仅仅因为设计?
谢谢!
卡菲基恩
答案 0 :(得分:3)
您可以将new D
分配给B
,因为D
包含B
所有内容,还有一些额外内容。因此,将其视为B
。
另一方面,new B
没有D
所拥有的所有内容,因此如果您执行了D
特定功能,或访问了D
特定属性/会员,它会失败的。
因此,此赋值/强制转换不安全或无效。