c#中的类型化vs强类型化
本文关键字:类型化 vs 强类型 | 更新日期: 2023-09-27 18:19:02
在c#中,是否有理由说强类型而只是类型呢?当有人说类型化类时,我想到的是某种类型而不是对象。除了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
编辑:没有所谓的类型语言。你有动态vs静态和弱vs强类型,它们解决了两种不同类型的问题。另一篇参考文章
强类型语言和静态类型语言的区别是什么?
请注意,最新的c#语言规范在其语言描述中实际上并没有使用术语"强类型"。这与Java语言规范形成对比,Java语言规范非常明确地声明它是强类型的。
因为c#语言规范没有使用这个术语,所以它也没有定义它。这就是你很难得到问题答案的原因之一。然而,你可以提出这样的理由:即使在规范中,c#并不是明确的"强类型"语言,但它确实具有强类型语言的大多数特征。
要回答你的c#问题,我建议看一下Java语言规范(Java与c#非常相似,许多基本原理即使不完全相同,也非常相似)。在第4章中指出:
Java编程语言也是一种强类型语言,因为类型限制了变量(第4.12节)可以保存的值表达式所能产生的,限制所支持的操作这些值,并确定操作的含义。强大的静态类型有助于在编译时检测错误。
我提供了这个答案,虽然我知道其他答案提供了维基百科上关于强类型的一般信息的链接,但这个问题特别涉及c#。我发现Java定义更有用,并且指向op。
另一个不是试图定义语言是强还是弱,是静态还是动态的角度。
我很抱歉说"强类型"。特别是当我在处理一个我们正在维护的特定项目时。这个可怕的代码库几乎所有的东西都使用了DataTable,值都是作为对象从列中通过索引获取的,在应用程序代码中有很多类型转换。也没有评论解释到底发生了什么。
这个系统的一部分现在正在用EF和Linq重建。现在我们将查询投射到pocos/dtos中。因此,当我说强类型时,拥有一个带有方法的服务返回某种类型的泛型列表就是我所说的。是服务和它的方法是强类型的,我说的不是c#本身。