我想知道爲什麼在C#中的一些石膏在編譯時檢查,而在其他情況下的責任傾倒在CLR。像上面一樣,這兩個都不正確,但以不同的方式處理。編譯時和運行時的鑄件C#
class Base { }
class Derived : Base { }
class Other { }
static void Main(string[] args)
{
Derived d = (Derived)new Base(); //Runtime InvalidCastException
Derived d = (Derived)new Other(); //Compile-time Cannot convert type...
}
在閱讀「深入C#」我找到關於這一主題的信息,其中作者日期說:
「如果編譯器的斑點,這實際上是不可能爲鑄造工作,它會觸發編譯錯誤 - 如果理論上允許,但在執行時實際上不正確,則CLR將拋出異常。「
是「理論」的意思是繼承層次連接(某些對象之間的另一種親和?),或者是編譯器的內部的公司嗎?
偉大的問題。我在等待比我更開明的人提供解釋。 – 2010-12-21 13:08:30