在C#中键入vs强类型

在C#中,有没有理由说强类型 vs只是打字 ? 当有人说类型类时,我会想到除了对象之外的某种类型。 几乎除了object之外的所有内容都在C#中输入。

一旦定义了非对象的类,该类就是一种类型。 它不再从那里输入。

顺便说一下,这不是关于类型安全性的问题(有效的内存访问和对象分配兼容性)。

你的术语不正确。 它不是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语言的东西。 您有动态与静态和弱与强类型,它们解决了两种不同类型的问题。 另一篇参考文章

强类型语言和静态类型语言之间有什么区别?

强类型和弱类型的术语指的是关于隐式类型转换的语言规则的刚性。 强类型语言对它接受的隐式转换要严格得多,而弱类型语言则更宽松。 换句话说,许多语言都有类型,但只有其中一部分具有类型。

可能会将这些术语与静态和动态类型这两个术语混淆,后者分别指编译类型或运行时的类型知识。 从这个意义上说,也许你已经听过这个术语被称为静态类型的简写。 (虽然我不能说我同意使用术语类型 ,但我认为这是唯一有意义的解释。)

请注意,最新的C#语言规范实际上并未在其语言描述中使用术语“强类型”。 这与例如Java语言规范形成对比,在Java规范中,它们非常明确地表明它是强类型的。

由于C#语言规范不使用该术语,因此它也没有定义它。 这是您很难得到问题答案的原因之一。 然而,你可以提出一个案例,即使按照其规范,C#并不是一种明确的“强类型”语言,它仍然具有强类型语言的大部分特征。

为了回答您的C#问题,我建议您查看Java语言规范(Java非常接近C#,如果不相同,许多基础知识非常相似)。 在第4章中,它指出:

Java编程语言也是一种强类型语言,因为类型限制了变量(§4.12)可以容纳的值或表达式可以生成的值,限制了这些值支持的操作,并确定了操作的含义。 强静态类型有助于在编译时检测错误。

我正在提供这个答案,而我认识到其他答案提供了关于维基百科关于强类型的一般信息的链接,这个问题与C#有关。 我发现Java定义更有用,并且指向OP。

另一个角度不是试图定义语言是强还是弱,还是静态或动态。

我说’强烈打字’是犯了罪。 特别是当我正在处理我们正在维护的特定项目时。 这个可怕的代码库使用DataTable几乎所有的东西,并且值作为对象被提取,从索引列开始,在应用程序代码中有大量的转换。 而且没有任何评论可以解释到底是怎么回事。

现在正在使用EF和Linq重建该系统的一部分。 现在我们将查询投射到pocos / dtos中。 因此,当我说强类型时,我所提到的具有返回特定类型的通用列表的方法的服务。 这是强类型的服务及其方法,我不是在谈论C#本身。