2012-02-09 42 views
4

奇怪的问题...协方差还在3.5/2.0?

我从例子中实现了协方差。

我的目标FW是4.0。

如何。我想看看它是否在3.5/2失败 - >但它不会。

它不能是因为协方差是从FW4.0。

enter image description here

改为3.0后,我建立和看到:(+在运行时不会失败)

enter image description here

enter image description here

+0

尝试使用编译器的框架2.0(3.5)版本,而不是4.0编译器。 – 2012-02-09 12:07:02

+0

@TetsujinnoOni没有改变目标FW就像在指定的目标工作? – 2012-02-09 12:08:11

+0

公共语言运行时和C#编译器(csc.exe)是两个独立的东西。在2.0版引入CLR的协变和反变量。他们直到版本4才被引入到C#中。您正在使用Compiler 4来构建版本3 IL,这就是它的工作原理。 – 2012-02-09 12:30:14

回答

4

协方差框架3的支持,但没有实现编译器。您正在使用的编译器4目标框架3.

这是在埃里克利珀博客文章中提到,我去看看我能找到它..

编辑

为了进一步澄清,:通用语言运行时和C#编译器(csc.exe)是两个独立的东西。在2.0版引入CLR的协变和反变量。他们直到版本4才被引入到C#中。您正在使用Compiler 4来构建版本3 IL,这就是它的工作原理。

+0

我该如何让它失败? – 2012-02-09 12:05:12

+0

使用.NET 3.0或3.5编译器。 – 2012-02-09 12:06:18

+0

我应该卸载fw4吗?是否有任何配置工作在清洁模式3.0? – 2012-02-09 12:07:11

1

自2.0版本以来,CLR支持协变和逆变类型参数。它只是C#语言,直到版本4才提供任何语法。

+0

我不明白如何在fw2中支持它。从我读的地方开始,它的编号为4. – 2012-02-09 12:13:13

+0

包括C#在内的所有.NET语言都被转换为相同的中间语言IL(类似于CLR的汇编语言)。现在,IL支持许多功能(如协变和反变换),但并非所有语言都提供使用它们的语法。在版本4中添加了C#中使用此功能的语法。 – Botz3000 2012-02-09 12:16:22

+0

因此我无法让它失败吗? (即使我使用2.0的csc.exe?)作为myles回答? – 2012-02-09 12:18:35