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