型別安全和安全性

型別安全程式碼只存取被授權存取的記憶體位置 (就這個討論而言,型別安全明確提到記憶體型別安全而不應與較廣義的型別安全相混淆)。例如,型別安全程式碼無法從另一個物件私用 (Private) 欄位讀取值。 它只以完整定義的允許方式來存取型別。

Just-in-Time (JIT) 編譯期間,選擇性驗證程序檢查方法的中繼資料 (Metadata) 和 Microsoft Intermediate Language (MSIL) 來確定它們被 JIT 編譯成原生機器碼 (Native Machine Code),以驗證它們是否為型別安全。 如果程式碼具有使用權限來略過驗證,這個程序會跳過不做。 如需驗證的詳細資訊,請參閱 Managed 執行程序

雖然型別安全驗證對於執行 Managed 程式碼並非必要條件,但型別安全在組件隔離 (Isolation) 和安全性強制中扮演至關重要的角色。 程式碼為型別安全時,Common Language Runtime 可以將組件完全彼此隔離。 這個隔離有助於確保組件不會彼此產生不利影響,而且它會增加應用程式的可靠性。 型別安全元件可以在相同處理序 (Process) 中安全地執行,即使它們接受不同層級的信任。 程式碼不是型別安全時,可能發生有害的副作用。 例如,執行階段不能防止 Unmanaged 程式碼呼叫機器 (Unmanaged) 碼並執行惡意的作業。 程式碼為型別安全時,Runtime 的安全性強制機制確保它不會存取機器碼,除非它具備進行這個動作的使用權限。 所有非型別安全的程式碼都必須已經用已傳遞的SkipVerification 列舉成員來授與 SecurityPermission 才能執行。

請參閱

概念

撰寫可驗證的型別安全程式碼

其他資源

重要的安全性概念