3

In C#, is there any reason to say strongly typed vs just typed? When someone says typed class, I think of some type other than object. Nearly everything except object is typed in C#.

Once you define a class that is not object, that class is a type. It doesn't get anymore typed from there.

By the way, this isn't a question about type safety (valid memory access and object assignment compatibility).

4

4 回答 4

5

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

可能会将这些术语与术语静态和动态类型混淆,它们分别指的是编译类型或运行时的类型知识。从这个意义上说,您可能听说过 typed 一词是statically typed的简写。(虽然我不能说我同意使用typed这个词,但我认为这是唯一有意义的解释。)

于 2013-06-19T22:12:41.327 回答
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

编辑:

没有类型语言这样的东西。您有动态与静态和弱与强类型,它们解决了两种不同类型的问题。另一篇参考文章

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

于 2013-06-19T22:10:59.203 回答
1

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

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

要回答您的 C# 问题,我建议您查看 Java 语言规范(Java 与 C# 非常相似,并且许多基础知识非常相似,即使不相同)。在第 4 章中,它指出:

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

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

于 2013-07-27T16:36:48.257 回答
0

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

我对说“强类型”感到内疚。尤其是当我正在处理我们正在维护的特定项目时。这个可怕的代码库使用 DataTable 来处理几乎所有内容,并且值作为对象从索引列中获取,并在应用程序代码中进行了大量转换。并且没有评论解释到底发生了什么。

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

于 2013-06-20T06:43:27.037 回答