什么是类型安全?

时间:2009-05-29 21:41:56

标签: .net testing type-safety brainbench

我最近参加了一次脑力训练考试,得到了很高的评价,但有几个问题对我来说很难。也许是因为英语不是我的母语......其中一个问题是:

以下哪一项描述了类型安全?

  1. 用于确保CLR中的引用和值类型的安全性的编程构造
  2. 禁止非托管访问导致内存泄漏的保护
  3. 特定于CLR的功能可确保类型无法访问自己的AppDomain外的内存
  4. 通过使用强名称密钥保护程序集及其类型而创建的机制
  5. 处理保证分配对象始终以兼容方式访问的概念
  6. 我认为它是1或5,但无论如何它们听起来都很奇怪:(

    您怎么看?

9 个答案:

答案 0 :(得分:10)

实际上我认为它是选择5,因为类型安全与安全无关。

答案 1 :(得分:7)

类型安全是一种语言的特色,旨在使[罗宾米​​尔纳] [1]关于ML编程的着名口号变得更好:良好类型的程序不会出错

口号需要一些解包才能正确理解,但它基本上意味着程序不会因为运行时类型错误而失败,即当应用于构造函数或函数的参数具有不兼容类型的值时。

考虑一种允许整数,整数函数作为第一类值,函数抽象和部分函数应用的语言,并将通常的整数算术运算符定义为二元函数。类型安全的属性是编译器强制执行的操作,以确保加法运算符的两个参数都是减少为整数而不是函数的表达式。如果程序是良好类型的,那么编译器可以为它发出可执行对象。否则,它会标记编程错误并中止。

答案 2 :(得分:4)

根据下面提供的msdn链接, http://msdn.microsoft.com/en-us/library/hbzz1a9a.aspx

类型安全代码仅访问其有权访问的内存位置。 (对于此讨论,类型安全特别指内存类型安全,不应在更广泛的方面与类型安全混淆。)例如,类型安全代码无法从另一个对象的私有字段读取值。它只能以明确定义的,允许的方式访问类型。

答案 3 :(得分:1)

  

选择5   处理分配对象的保证的概念总是以兼容的方式访问

类型安全处理确保在创建Foo时,不能将其视为条形图。如果您不知道它是什么类型(或不保证),您编写的代码可能无法按预期工作。

答案 4 :(得分:1)

类型安全语言将确保(在编译时)您不会在类型上调用不兼容的方法,例如int类型的length()。非类型安全语言将在运行时解决。所以,选择5。

答案 5 :(得分:1)

正如其他人所说,选择5 ......

一般情况下 - 对于.NET,请查看通用类型系统(CTS),它可以实现跨语言的内容和类型安全性。

退房:http://en.wikipedia.org/wiki/Type_safety ...

答案 6 :(得分:1)

来自MSDN参考:最好的答案是#3:见http://msdn.microsoft.com/en-us/library/hbzz1a9a(v=vs.80).aspx

答案 7 :(得分:1)

类型安全与安全无关。这是关于确保将兼容的实例分配给正确的变量。

要了解有关类型安全的更多信息,请参阅type safety in .NET

答案 8 :(得分:0)

选项#5。类型安全是一种保证,而不是具体的事情。 .NET代码可能是类型安全的...比如说程序集使用不安全的代码来执行非托管调用(PInvoke)。在JIT期间,执行一个过程来验证被jitted的类型确实是类型安全的。我不知道有关这个过程的任何细节,但如果一个jitted类型通过,那么它被认为是可验证的类型安全。