【问题标题】:C# Dynamically typed languageC# 动态类型语言
【发布时间】:2009-02-19 17:31:41
【问题描述】:

随着 .NET 3.5 中的新功能(例如 var、Lambda、linq 等)以及更多即将推出的功能,我们可以得出结论,C# 不仅是静态类型语言,而且是动态类型 ?

为什么或为什么不?

编辑#1

正如下面的许多海报所声称的那样,.net 4.0 将为该语言添加动态类型。这会减慢语言速度吗?

随着每个版本的发布,csharp 都会从不同的语言中获取一些东西。就 .Net1.1 而言,我们的祖先甚至不打算将其变成函数式语言......

编辑#2

我认为你们中的许多人误解了这个问题;因为我指的是整个 C# 语言,包括即将发布的 4.0。因此,可以公平地说该语言是动态类型的......

【问题讨论】:

  • 很好——你完全发明了“动态”这个词。我喜欢它。
  • +1 这是一个重要的区别 - 好问题!

标签: c# .net programming-languages


【解决方案1】:

C# 不是动态类型的 - 在您提到的示例中,所有类型都是静态推断的。 下一个版本的 C# 将包含一些动态功能,但可以使用 COM 和真正的动态语言。

[Edit #1] 是的,C# 的新动态特性会变慢,因为所有使用它的东西都需要后期绑定。但是,如果您使用它,它只会减慢您的应用程序 - 它不会改变核心语言本身。 C# 4 将是一种静态类型语言,能够处理后期绑定类型。

[Edit #2] No C# 4 不会是动态类型语言。 C# 4 引入了一个新的dynamic 类型,它将替代对类型成员的后期绑定来代替静态类型检查。动态功能仅适用于这些动态类型。 C# 的底层类型系统没有改变。

【讨论】:

    【解决方案2】:

    不,它仍然是静态类型的,var/lambda/linq 都使用编译器的推断,因此在编译时类型是已知的,动态/鸭子类型将在 c# 4.0 中提供

    【讨论】:

    • 它应该是:“不,它仍然是静态类型的,var/lambda/linq 都使用编译器的推断,所以类型在编译时是已知的,动态/ c# 4.0 将附带鸭子打字”
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      评论者:您确定动态类型可以如此容易地包含吗?我有一种感觉,它们的影响会扩散开来。

      【讨论】:

      • 有趣,您认为影响会以何种方式传播?
      • 乍一看,我认为它可能会影响方法签名或重载选择。不过,几年后回顾这个问题会很有趣。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多