C# 是静态类型还是大部分静态类型



我在读乔达菲的书,他说:C# is a (mostly) statically typed.

我读过的大多数将 C# 描述为强类型语言的文章和书籍都有效地使用"强类型"来表示静态类型。

真相在哪里?mostly是什么意思?(也许是指很少有功能超出 CLR 的类型安全?

C# 中最明显的非静态类型部分是 dynamic 关键字。声明为 dynamic 的变量将与类型相关的检查推迟到运行时,因此以下代码是合法的:

dynamic x = "a string";
x = 7;
x.NonExistingMethod();

C# 的其他部分(包括 var 关键字)是静态类型的。人们有时会将 var 与 JavaScript 中的关键字混淆,但 C# 中的 var 所做的是类型推断。仍然是静态类型,只是不太明确。

静态类型编程语言在编译时而不是运行时执行类型检查(the process of verifying and enforcing the constraints of types)。动态类型编程语言在运行时而不是编译时执行类型检查。

强/弱类型是关于如何区分严格的类型(例如,语言是否尝试从字符串到数字进行隐式转换)。

简单地说:在静态类型语言中,类型是静态的,这意味着一旦你将变量设置为类型,你就不能改变它。

这里的主要优点是编译器可以完成各种检查,因此在很早的阶段就捕获了许多愚蠢的错误。

如果在运行时解释变量的类型,则语言是动态类型的。这意味着作为程序员,您可以更快地编写,因为您不必每次都指定类型。示例:Perl、Ruby、Python

大多数脚本语言都有此功能,因为无论如何都没有编译器来执行静态类型检查,但是您可能会发现自己在搜索由于解释器误解变量类型的错误而搜索错误

最新更新