タイプ セーフとセキュリティ
更新 : 2007 年 11 月
タイプ セーフなコードは、アクセス権限を与えられているメモリ位置にだけアクセスします。この場合のタイプ セーフとは、メモリのタイプ セーフの意味です。広い意味でのタイプ セーフと混同しないでください。たとえば、タイプ セーフなコードは、他のオブジェクトのプライベート フィールドから値を読み取ることができません。適切に定義された許容される方法でだけ、タイプにアクセスします。
ジャスト イン タイム (JIT: Just-In-Time) コンパイル時に、オプションの検査プロセスは、ネイティブなマシン コードに JIT コンパイルされるメソッドのメタデータと Microsoft Intermediate Language (MSIL) を調べて、タイプ セーフかどうかを確認します。コードに検査を省略するためのアクセス許可がある場合、このプロセスは省略されます。検査の詳細については、「MSIL からネイティブ コードへのコンパイル」を参照してください。
タイプ セーフの検査はマネージ コードの実行に必須ではありませんが、アセンブリの分離とセキュリティの適用において、タイプ セーフであることが重要な意味を持ちます。コードがタイプ セーフであると、共通言語ランタイムはアセンブリを互いに完全に分離できます。アセンブリが互いに分離していると、アセンブリどうしが悪い影響を及ぼしあうことがなく、アプリケーションの信頼性が向上します。タイプ セーフなコンポーネントは、信頼されるレベルが異なっていても、同じプロセスで安全に実行できます。コードがタイプ セーフでないと、望ましくない副作用が生じることがあります。たとえば、ランタイムは、アンマネージ コードがネイティブ (アンマネージ) コードにアクセスしたり、不正な操作を実行することを防止できません。コードがタイプ セーフであると、ランタイムのセキュリティ適用機構によって、必要なアクセス許可を持たないコードがネイティブ コードにアクセスすることはできません。タイプ セーフでないすべてのコードは、列挙子メンバ SkipVerification が渡された SecurityPermission を与えられていないと実行できません。