在C#中,有没有理由说强类型与键入?当有人说类型类时,我会想到除了对象之外的某种类型。几乎除了object之外的所有东西都是用C#键入的。
一旦定义了一个非对象的类,该类就是一个类型。它不再从那里输入。
顺便说一下,这不是关于类型安全性的问题(有效的内存访问和对象分配兼容性)。
答案 0 :(得分:5)
术语强弱类型是指关于隐式类型转换的规则的严格性。强类型语言对它接受的隐式转换要严格得多,而弱类型语言则更宽松。换句话说,许多语言都有类型,但只有其中一部分具有强类型。
你可能会将这些术语与静态和动态类型混淆,后者分别指编译类型或运行时的类型知识。从这个意义上说,也许你已经听说过 typed 一词是静态类型的简写。 (虽然我不能说我同意使用 typed 一词,但我认为这是唯一有意义的解释。)
答案 1 :(得分:3)
您的术语不正确。它不是strongly typed vs just typed
这是strong vs. weak typing
一旦你用这些术语谈论它,那么就有了很大的区别。
你可以通过谷歌阅读它。
http://en.wikipedia.org/wiki/Strong_and_weak_typing#Definitions_of_.22strong.22_or_.22weak.22
修改强>
没有只有Typed语言的东西。您有动态与静态和弱与强类型,它们解决了两种不同类型的问题。另一篇参考文章
What is the difference between a strongly typed language and a statically typed language?
答案 2 :(得分:1)
请注意,最新的C#语言规范实际上并未在其语言描述中使用术语“强类型”。这与例如Java语言规范形成对比,在Java规范中,它们非常明确地表明它是强类型的。
由于C#语言规范不使用该术语,因此它也没有定义它。这是您很难得到问题答案的原因之一。然而,你可以提出一个案例,即使按照其规范,C#并不是一种明确的“强类型”语言,它仍具有强类型语言的大多数特征。
为了回答你的C#问题,我建议你看一下Java语言规范(Java非常接近C#,如果不相同,许多基本原理非常相似)。在第4章中,它指出:
Java编程语言也是一种强类型语言, 因为类型限制了变量(§4.12)可以容纳的值或 表达式可以生成,限制支持的操作 这些值,并确定操作的含义。强大 静态类型有助于在编译时检测错误。
我正在提供这个答案,而我认识到其他答案提供了关于维基百科关于强类型的信息的链接,一般来说,这个问题与C#有关。我发现Java定义更有用,而且指向OP。
答案 3 :(得分:0)
另一个不试图定义语言是强还是弱或静态或动态的角度。
我对说'强烈打字'感到内疚。特别是当我正在处理我们正在维护的特定项目时。这个可怕的代码库使用DataTable几乎所有的东西,并且值被提取为对象,从索引列开始,在应用程序代码中有大量的转换。而且没有任何评论可以解释到底发生了什么。
现在正在使用EF和Linq重建此系统的一部分。现在我们将查询投射到pocos / dtos中。因此,当我说强类型时,我所提到的具有返回特定类型的通用列表的方法的服务。这是强类型的服务及其方法,我不是在谈论C#本身。