Share via


Такой мечтатель

Я заметил, что у этого блога и у фотоблога программиста Раяна Гослина (Ryan Goslin) есть как минимум один общий читатель:

RyanGosling1

(Надпись на рисунке: «Эй, красотка! Мне правда нравится то, как ты используешь паттерн посетитель для преобразования этой неизменяемой структуры данных. Давай на .NET User Group обсудим за пиццей последний пост Эрика Липперта о новых асинхронных фичах языка C#»)

Признаться, я смеялся.

Если быть предельно точным, то я хочу указать на небольшую ошибку в первом посте:

RyanGosling3

(Надпись на рисунке: «Эй, красотка! Вариантность обобщенных типов в .NET появилась только начиная с версии 4.0»)

На самом деле ковариантность и контравариантость обобщенных интерфейсов и делегатов на платформе .NET была с самого начала, после их появления в версии 2; вариантность была всегда. Вы всегда могли написать программы на IL-е и скомпилировать его с помощью ILDASM и без проблем получить вариантность обобщений. Однако не один из популярных языков не поддерживал этой возможности до выхода 4-й версии платформы, поэтому ни один интерфейс или делегат из стандартной библиотеки не был вариантным. Поэтому, фактически, вариантность не была распространенной возможностью до выхода 4-й версии .NET Framework, однако такая возможность была всегда.

И в ответ на письмо, присланное мне неизвестным читателем, я публикую следующую фотографию:

kinopoisk.ru

(Надпись на рисунке: «Эй, красотка! Ты единственный и самый лучший кандидат для моих аргументов.»

В следующий раз: печальные новости о критических изменениях (breaking changes): они повсюду!

Оригинал статьи