2012-02-09 75 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