类型安全和安全性
更新:2007 年 11 月
类型安全代码只访问被授权可以访问的内存位置。(在本讨论中,类型安全特指内存类型安全,不应与范围更广的类型安全混淆。) 例如,类型安全代码不能从其他对象的私有字段读取值。它只以定义完善的允许方式访问类型。
在实时 (JIT) 编译期间,可选的验证过程检查要实时编译为本机代码的方法的元数据和 Microsoft 中间语言 (MSIL),以验证它们是否为类型安全。如果代码具有忽略验证的权限,则将跳过此过程。有关验证的更多信息,请参见将 MSIL 编译为本机代码。
尽管类型安全验证对于运行托管代码不是强制的,但类型安全在程序集隔离和安全性强制中起着至关重要的作用。如果代码是类型安全的,则公共语言运行库可以将程序集彼此间完全隔离。这种隔离有助于确保程序集之间不会产生负面影响,且提高应用程序的可靠性。即使类型安全组件的信任级别不同,它们也可以在同一过程中安全地执行。如果代码不是类型安全的,则会出现不需要的副作用。例如,运行库无法阻止非托管代码调用到本机(非托管)代码中和执行恶意操作。当代码是类型安全时,运行库的安全性强制机制确保代码不会访问本机代码,除非它有访问本机代码的权限。所有非类型安全的代码都必须通过传递的枚举成员 SkipVerification 授予 SecurityPermission 后才能运行。