c#的陣列是支援陣列協變性的,即允許將子類的陣列賦值給父類的陣列變數。
這樣的功能可能在編譯器產生型別不安全的問題,引發型別異常,因為clr在執行期會根據陣列變數在對上找到資料元素,再找到其型別物件,獲取到資料的實際元素型別,如果實際元素型別和賦值的變數的型別不同且不是派生關係,那麼會造成執行期clr型別不匹配異常
class program
public static void main()
int intarr = ;
obj objarr = intarr;
objarr[0] = "123"; //可以通過編譯,因為「123」是字串,從object派生,但是執行時clr檢測出陣列實際元素型別時system.int32,無法進行轉換。}}
CLR執行模型
clr common language runtime 公共語言執行時,是乙個可由多種程式語言使用的 執行時 在執行時,clr根本不關心開發人員用的是哪一種語言來變寫 它只關注語言是否是面向clr 面向執行時 的.記憶體管理 程式集載入 安全性 異常處理和執行緒同步。3 如圖 無論是用的是哪一種編譯...
CLR執行模型
然後,將若干個託管模組合併成assembly.載入clr 在 system32 下有mscoreee.dll 說明已經安裝.首次執行一方法 在執行 main 之前,clr 建立乙個內部 ds來儲存 code 所引用的 type.呼叫方法時 jit complier將il 編譯為本地指令 在 am的元...
執行期語意學
物件的構造和析構 講解在以下幾種情況下 編譯器是如何安插構造和析構函式?1.全域性物件 2.區域性靜態物件 3.陣列物件 1 全域性物件 matrix g identity main c 保證了在main函式中第一次用到g str之前,將g str構造出來,在main 函式結束之前將g str毀掉。...