我正在阅读JoeDuffy书,他说:C# is a (mostly) statically typed.
我读过的大多数文章和书籍都将C#描述为强类型语言,实际上使用“强类型”来表示静态类型。
真相在哪里? mostly
是什么意思? (也许是指一些超出CLR类型安全性的特征?)
答案 0 :(得分:2)
静态类型编程语言在编译时键入检查(the process of verifying and enforcing the constraints of types
)而不是运行时。动态类型编程语言在运行时进行类型检查,而不是编译时。
强/弱类型是关于如何区分严格类型(例如,语言是否尝试从字符串到数字进行隐式转换)。
简单地说就是这样:在静态类型语言中,类型是静态的,这意味着一旦将变量设置为类型,就无法更改它。
这里的主要优点是所有类型的检查都可以由编译器完成,因此在很早的阶段就会发现很多愚蠢的错误。
如果在运行时解释变量的类型,则动态输入语言。这意味着您作为程序员可以更快地编写,因为您不必每次都指定类型。示例:Perl,Ruby,Python
大多数脚本语言都有此功能,因为无论如何都没有编译器可以执行静态类型检查,但您可能会发现自己正在搜索由于解释器误解变量类型而导致的错误
答案 1 :(得分:2)
C#中最明显的非静态类型部分是dynamic
关键字。声明为dynamic
的变量将与类型相关的检查推迟到运行时,因此以下代码是合法的:
dynamic x = "a string";
x = 7;
x.NonExistingMethod();
C#的其他部分(包括var
关键字)是静态类型的。人们有时会将var
与JavaScript中的关键字混淆,但C#中的var
所做的是类型推断。仍然是静态类型,只是不太明确。