-
06-09-2019 - |
题
我最近参加了一次脑力测试,获得了高分,但是有几个问题对我来说很难。也许是因为英语不是我的母语......其中一个问题是:
以下哪一项描述了类型安全?
- 用于确保 CLR 中引用和值类型安全的编程构造
- 防止由于禁止非托管访问而导致内存泄漏
- 特定于 CLR 的功能可确保类型不能访问其自己的 AppDomain 之外的内存
- 一种通过使用强命名密钥来保护程序集及其类型的机制
- 这个概念涉及确保分配的对象始终以兼容的方式访问
我认为是 1 或 5,但无论如何,它们对我来说听起来很奇怪:(
你怎么认为?
解决方案
实际上我认为是选择 5,因为类型安全与安全性无关。
其他提示
类型安全 是一种语言的特性,旨在兑现 [Robin Milner][1] 关于 ML 编程的著名口号: 类型良好的程序不会出错.
这个口号需要一些解包才能正确理解,但它基本上意味着程序不会因为运行时类型错误而失败,即当应用于构造函数或函数的参数具有不兼容类型的值时。
考虑一种语言,它允许整数、整数函数作为第一类值、函数抽象和部分函数应用,并将常用的整数算术运算符定义为二元函数。类型安全属性是编译器强制执行的,以确保加法运算符的两个参数都是简化为整数而不是函数的表达式。如果程序类型良好,则编译器可以为其生成可执行对象。否则,它会标记编程错误并中止。
根据下面提供的msdn链接,http://msdn.microsoft.com/en-us/library/hbzz1a9a.aspx
类型安全代码仅访问其有权访问的内存位置。(对于本讨论,类型安全特指内存类型安全,不应与更广泛的方面的类型安全混淆。)例如,类型安全代码无法从另一个对象的私有字段读取值。它仅以明确定义的、允许的方式访问类型。
选择5保证始终以兼容方式访问分配的对象的概念
类型安全涉及确保当您创建 Foo 时,不能将其视为 Bar。如果您不知道它是什么类型(或不能保证),您编写的代码可能无法按预期工作。
类型安全语言将确保(在编译时)您不会在类型上调用不兼容的方法,例如int 类型上的 length() 。非类型安全语言会在运行时解决这个问题。所以,选择5。
正如其他人所说,选择5...
一般来说,对于 .NET,请查看通用类型系统 (CTS),它支持跨语言内容和类型安全。
这是选项#5。类型安全是一种保证,而不是具体的东西。.NET 代码可以 不是 类型安全...例如,程序集使用不安全代码执行非托管调用 (PInvoke)。在 JIT 过程中,会执行一个过程来验证被 jitted 的类型确实是类型安全的。我不知道有关此过程的任何细节,但如果 jitted 类型通过,那么它被认为是可验证类型安全的。