C# 协方差也在3.5/2.0?

C# 协方差也在3.5/2.0?,c#,.net-4.0,covariance,C#,.net 4.0,Covariance,奇怪的问题 我从示例中实现了协方差 我的目标FW是4.0 无论如何。我想看看它是否在3.5/2->上失败,但它不会 这不可能,因为协方差来自FW4.0 更改为3.0后,我构建并查看:(+在运行时不会失败) 协方差在框架3中受支持,但未在编译器中实现。您使用的是针对框架3的编译器4 Eric Lippert的一篇博文中提到了这一点,我会看看是否能找到 编辑 为了进一步澄清,公共语言运行库和C#编译器(csc.exe)是两个独立的东西。在2.0版CLR中引入协方差和逆变。直到第4版才将其引入C#

奇怪的问题

我从示例中实现了协方差

我的目标FW是4.0

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

这不可能,因为协方差来自FW4.0

更改为3.0后,我构建并查看:(+在运行时不会失败)


协方差在框架3中受支持,但未在编译器中实现。您使用的是针对框架3的编译器4

Eric Lippert的一篇博文中提到了这一点,我会看看是否能找到

编辑


为了进一步澄清,公共语言运行库和C#编译器(csc.exe)是两个独立的东西。在2.0版CLR中引入协方差和逆变。直到第4版才将其引入C#。您正在使用编译器4构建版本3 IL,这就是它工作的原因。

自版本2.0以来,CLR支持协变和逆变泛型类型参数。只是C语言在第4版之前没有提供任何语法

使用.NET 3.0或3.5编译器。我应该卸载fw4吗?是否有任何配置可以在清洁模式3.0下工作?无需卸载,框架可以共存没有问题。只需从命令行中使用所需的编译器,或者使用早期版本的VSF,奇怪的是,您正在查找的博客文章是:哈!是的,那个。计算机编程和幽默,一个棘手的混合体。试着使用framework 2.0(3.5)版本的编译器,而不是4.0版本的编译器。@Tetsujinnoni没有改变目标FW就像在指定的目标中工作一样?公共语言运行库和C#编译器(csc.exe)是两个不同的东西。在2.0版CLR中引入协方差和逆变。直到第4版才将其引入C#。您正在使用编译器4构建版本3 IL,这就是它工作的原因。我不明白fw2如何支持它。从我读到的内容来看,它是在4.NET中引入的。所有的.NET语言,包括C#,都被翻译成相同的中间语言IL(类似于CLR的汇编语言)。现在IL支持许多特性(如协方差和逆变),但并非所有语言都提供语法来使用它们。C#中使用此功能的语法是在版本4中添加的。所以我没有办法失败吗?(即使我在2.0版中使用csc.exe?)作为迈尔斯的答案?你可以像他说的那样使用旧的编译器(通过命令行或使用旧版本的VS),它会失败,因为旧的编译器无法识别新的语法。但是,您仍然不需要强制它失败,因为如果较旧的项目引用您的Dll,它们只会忽略协方差/逆变。来自CLI规范:“不希望支持变体的语言可以忽略该功能,并将所有泛型类型视为非变体”