Это почти все, да. Есть некоторые очень незначительные изменения в блокировке и событиях, но обычно они не будут заметны. Информацию об изменениях событий см. В серии блогов Криса Берроуза ; о блокировке см. блог Эрика Липперта . Короче говоря, блокировка теперь более надежна - она использует новую перегрузку Monitor.Enter
, чтобы она могла определить, была ли блокировка получена даже перед лицом асинхронных исключений. Подобные полям события теперь свободны от блокировки, и ссылка на метод доступа к полевым событиям (добавить / удалить) в объявленном классе будет ссылаться на событие, а не на поле.
Это определенно меньший набор изменений, чем 2 и 3, но я думаю, что это хорошо во многих отношениях - я думаю, что разработчикам нужно определенное количество времени для того, чтобы текущие функции "застряли". И 2, и 3 были действительно большими выпусками функций ... и некоторые из этих функций до сих пор не совсем понятны, IMO.
Я уверен, что это не будет концом эволюции C # - у меня есть некоторые идеи, поэтому я уверен, что команда C # имеет гораздо больше - но в одном выпуске может быть упаковано только так много. Хотя я подозреваю, что большинство разработчиков на самом деле не будут использовать динамическую типизацию очень часто, это огромное изменение с точки зрения самого языка, IMO - очень сложная вещь, чтобы понять правильно. Я не удивлен, что у команды не было много времени, чтобы создать гораздо больше функций в том же цикле выпуска.
Не забывайте, что VS2010 тоже работал над ним, интегрируя в него все новые функции и работая над довольно значительными изменениями в самой Visual Studio.
Стоит отметить, что хотя ковариация и контравариантность являются определенно функциями CLR - и действительно были с CLR v2.0 - они по-прежнему являются языковыми и библиотечными функциями, так же как дженерики и обнуляемое значение типы охватывают CLR, рамки и язык.