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