C# 动态类型语言

7
使用.NET 3.5中的新功能(例如var、Lambda、linq等),以及更多即将推出的功能,我们可以得出结论:C#不仅是静态类型语言,还是动态类型语言吗?
为什么或为什么不是?
编辑#1
正如下面许多帖子所声称的那样,.net 4.0将为该语言添加动态类型。这会减慢语言吗?
每个版本的csharp都从不同的语言中提取了一些东西。就.Net1.1而言,我们的祖先甚至没有打算将其作为功能语言...
编辑#2
我认为你们很多人误解了问题;因为我是指C#语言总体,包括即将推出的4.0版。因此,可以说该语言是动态类型的...

不错 - 你刚刚发明了“动态的”这个词,我喜欢它。 - Jeff Yates
+1 这是一个重要的区别 - 很好的问题! - Andrew Hare
4个回答

13

C#并非动态类型——在您提到的示例中,所有类型都是静态推断的。 下一个版本的C#将包括一些动态功能,用于使用COM和真正动态的语言。

[编辑#1] 是的,C#的新动态特性将较慢,因为使用它的所有内容都需要使用后期绑定。 但是,如果您不使用它,它只会减慢您的应用程序——这不是对核心语言本身的更改。 C# 4将是一种具有处理后绑定类型能力的静态类型语言。

[编辑#2] 不,C# 4不会成为一种动态类型语言。 C# 4引入了一个新的dynamic类型,它将代替静态类型检查中的类型成员的后期绑定。 动态功能仅在这些动态类型上可用。 C#的基础类型系统没有更改。


2

不,它仍然是静态类型的,var/lambda/linq 都使用编译器推断来确定类型在编译时已知,动态/鸭子类型将随 c# 4.0 一起推出。


不,它仍然是静态类型的,var/lambda/linq 都使用编译器推断类型,因此类型在编译时已知,动态/鸭子类型将随着 C# 4.0 的到来。 - Mehrdad Afshari

1
动态类型?不是。从技术上讲,C#是一种静态类型语言。它通过.NET运行时提供的CLR反射服务具有动态方法调度能力(自v1.0起可用,与.NET 3.5特性无关,C# 3.0特性仍为静态类型)。C# 4.0将拥有真正的动态类型。

0
评论者们:你们真的那么确定动态类型可以如此轻松地被包含吗?我有一种感觉,它们的影响会扩散。

有趣,你认为这些影响会以何种方式扩散? - Andrew Hare
乍一看,我认为它可能会影响方法签名或重载选择。不过,几年后回顾这个问题会很有趣。 - brianary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接