2012-02-09 2 views
4

странная проблема ...Ковариация Также в 3.5/2.0?

Ive реализована ковариация из примера.

Моя цель 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. –

+0

@TetsujinnoOni is not change target FW - это как работа в указанной цели? –

+0

Обычный язык выполнения и компилятор C# (csc.exe) - это две разные вещи. Ковариация и контравариантность, которые представлены в CLR версии 2.0. Они не были введены в C# до версии 4. Вы используете компилятор 4 для сборки версии 3 IL, поэтому он работает. –

ответ

4

ковариации была поддержана в рамках 3, но не реализованы в компилятор. Вы используете компилятор 4 таргетирования 3.

Об этом говорится в блоге Эрик Липперт, я буду видеть, если я могу найти его ..

EDIT

Для дальнейшего уточнения ,: Общий Язык Runtime и компилятор C# (csc.exe) - это две разные вещи. Ковариация и контравариантность, которые представлены в CLR версии 2.0. Они не были введены в C# до версии 4. Вы используете компилятор 4 для сборки версии 3 IL, поэтому он работает.

+0

Как я могу заставить его потерпеть неудачу? –

+0

Используйте компилятор .NET 3.0 или 3.5. –

+0

Должен ли я удалить fw4? есть ли какая-либо конфигурация для работы в чистом режиме 3.0? –

1

CLR поддерживает ковариантные и контравариантные параметры типового типа с версии 2.0. Это просто язык C#, который не предоставил ему синтаксиса до версии 4.

+0

Я не понимаю, как это можно поддерживать в fw2. откуда я прочитал, он был введен в 4. –

+0

Все языки .NET, включая C#, переводились на один и тот же промежуточный язык, IL (что-то вроде языка ассемблера CLR). Теперь IL поддерживает многие функции (например, ковариацию и контравариантность), но не все языки предоставляют синтаксис для использования всех них. Синтаксис в C# для использования этой функции был добавлен в версии 4. – Botz3000

+0

, так что у меня нет возможности провалить его? (даже если я использую csc.exe для 2.0?), как ответит myles? –

Смежные вопросы