我阅读了无数关于 C# 4.0 新功能的博客、帖子和 StackOverflow 问题。甚至新的 WPF 4.0 功能也开始公开出现。我找不到但想知道的内容:

  1. 从 C#/WPF 开发人员的角度来看,CLR 4.0 有哪些主要变化?
  2. CLR 4.0 整体上有哪些主要变化?

我认为,在内部,大多数变化都是针对新的动态语言和并行编程。但还有其他重大改进吗?因为语言改进就是语言改进。你只需要新的编译器,除了 1.0/1.1 版本之外,这些功能可以在较低版本的 .Net 中使用(至少其中大部分可以使用)。

如果以上功能是唯一的,则仅对于这些功能,版本更改为 4.0,我认为这是 4.0,因为它基于 .Net 4.0 版本(即1.0/1.1、2.0 和 3.0/3.5 之后)。版本增量是否合理?

编辑:

正如 Pavel Minaev 在评论中指出的那样,即使这两个功能也是独立于 CLR 的。3.0 和 3.5 也有速度和其他方面的改进。那么为什么要增加版本呢?

有帮助吗?

解决方案

我知道的一个新的CLR是为了 NoPIA支持 - 基本上,它允许运行时将具有等效定义的不同类型视为相同 - 所以如果两个程序集AB每个都有一个COM导入接口IFoo在其中声明,具有相同的IID和相同的成员,运行时将它们视为等效类型;所以,如果有一个实例Foo实现[A]IFoo,你可以将其转换为[B]IFoo,并且演员阵容也可以。

另一个原因是能够在单个进程中并排托管多个CLR版本。例如,您无法在一个进程中托管1.x和2.0,但您可以托管2.0和4.0。这样做的主要好处是能够同时加载为CLR版本编写的插件。

一个小小的问题是,有一些例外已经变得无法捕捉,例如StackOverflowException在2.0中 - 例如,你不能再抓住AccessViolationException了。

此外,此处是CLR 4.0上的PowerPoint演示文稿来自PDC 2008.现在可能有点过时了,但那里提到的大多数东西似乎都出现在贝塔中。

其他提示

有很多变化。

在CLR本身中,有一些变化。正在更改垃圾收集器以支持在工作站模式下并发收集gen0 / 1和gen2。此外,安全性的实施方式也有一些变化。并行框架改变了一些CLR的线程池实现(它不是完全托管的,而是运行时本身的一部分)。此外,类型系统也有一些变化,主要与新的PIA COM支持有关。

最大的变化可能是更多的库/框架更改,而不是CLR更改。例如将DLR集成到框架中,以及新的动态类型。在框架方面,您拥有反应式框架,并行库扩展,代码契约,元组支持以及许多小的更改(即:Enum.TryParseLazy<T>,以及大量其他小但很好的改进)。

我不相信有任何新的 IL 指令。新的 CLR 对内联和垃圾收集等方面进行了改进,其功能与 2.0 CLR 相同,但更好。虚拟机(例如 CLR 或 JVM)是​​一个具有多种可能实现的抽象概念。我相信 CLR 4.0 与 CLR 2.0 是相同的抽象机,只是改进了实现。

即使是新的动态内容也只是使用新 API 的编译器技巧(与 Java 被提议作为新的操作码.)

如果我错了,我很想知道!

对于每个发布文档团队,创建<!>“什么是新的<!>”;文档。

以下是C#4.0 Beta2的版本:什么是Visual C#2010中的新功能

这是.NET Framework 4.0 Beta2的一个: .NET Framework第4版中的新功能

这些是您可以找到的最完整的更改列表。

CLR中的许多核心接口和委托类型已更新,以支持 generic covariance and contravariance 。例如,IEnumerable<T>已更改为IEnumerable<out T>

我尝试查看 Reflector 中的一些新的 C# 内容,看看下面是否有新内容:

  • 动态的 类型被翻译为 目的s,通过编译器魔法,添加库调用来处理运行时绑定。
  • 可选参数通过编译器处理。如果您调用 Foo(int x = 5),而不指定 x 的值,您将在 Reflector 中看到该调用为 Foo(5)。

所以我想这些变化不是你能轻易发现的(就像 CLR 2.0 中的通用支持)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top