новости программирования

The history of C#

В этой статье представлена история каждого основного выпуска языка C#. Команда разработчиков C# продолжает внедрять инновации и добавлять новые возможности. Подробный статус функций языка, включая функции, рассматриваемые для предстоящих выпусков, можно найти в репозитории dotnet/roslyn на GitHub.

C# версии 1.0

Если вернуться назад и посмотреть, то C# версии 1.0, выпущенный вместе с Visual Studio .NET 2002, был очень похож на Java. В рамках заявленных целей разработки ECMA, он стремился стать «простым, современным, объектно-ориентированным языком общего назначения». В то время внешний вид, похожий на Java, означал, что он достиг этих ранних целей проектирования.

Но если вы оглянетесь на C# 1.0 сейчас, то обнаружите, что у вас немного закружилась голова. В нем отсутствовали встроенные возможности async и некоторые тонкие функции, связанные с дженериками, которые вы считаете само собой разумеющимися. По сути, в нем вообще не было дженериков. А LINQ? Еще не был доступен. Эти дополнения должны были появиться через несколько лет.

C# версии 1.0 выглядел обделенным возможностями по сравнению с сегодняшним днем. Вам придется писать многословный код. Но все же с чего-то надо начинать. C# версии 1.0 был жизнеспособной альтернативой Java на платформе Windows.

новости программирования

Основные возможности C# 1.0 включали:

  • Классы
  • Структуры
  • Интерфейсы
  • События
  • Свойства
  • Делегаты
  • Операторы и выражения
  • Заявления
  • Атрибуты

C# версии 1.2

C# версии 1.2 поставляется вместе с Visual Studio .NET 2003. Она содержала несколько небольших усовершенствований языка. Наиболее примечательным является то, что начиная с этой версии, код, генерируемый в цикле foreach, вызывал Dispose на IEnumerator, когда этот IEnumerator реализовывал IDisposable.

C# версии 2.0

Теперь все начинает становиться интересным. Давайте рассмотрим некоторые основные возможности C# 2.0, выпущенного в 2005 году вместе с Visual Studio 2005:

  • Generics
  • Частичные типы
  • Анонимные методы
  • Нулевые типы значений
  • Итераторы
  • Ковариация и контравариация

Другие возможности C# 2.0 добавили возможности к существующим функциям:

  • Раздельная доступность геттера/сеттера
  • Преобразования групп методов (делегаты)
  • Статические классы
  • Вывод делегатов

Хотя C#, возможно, начинался как универсальный объектно-ориентированный (ОО) язык, C# версии 2.0 быстро изменил это. Как только они встали на ноги, они начали бороться с некоторыми серьезными болевыми точками разработчиков. И они значительно улучшили их.

С помощью generics типы и методы могут работать с произвольными типами, сохраняя при этом безопасность типов. Например, имея List, вы можете иметь List или List и выполнять безопасные для типов операции над этими строками или целыми числами во время итерации по ним. Использование generics лучше, чем создание типа ListInt, производного от ArrayList, или приведение от Object для каждой операции.

В C# версии 2.0 появились итераторы. Если говорить кратко, итераторы позволяют просматривать все элементы в списке (или других перечислимых типах) с помощью цикла foreach. Наличие итераторов как первоклассной части языка значительно улучшило читабельность языка и способность людей рассуждать о коде.

И все же C# продолжал играть в догонялки с Java. Java уже выпустила версии, включающие дженерики и итераторы. Но это скоро изменится, поскольку языки продолжали развиваться раздельно.

C# версии 3.0

C# версии 3.0 появился в конце 2007 года вместе с Visual Studio 2008, хотя полный набор возможностей языка будет представлен в .NET Framework версии 3.5. Эта версия ознаменовала собой серьезное изменение в развитии C#. Она утвердила C# в качестве действительно грозного языка программирования. Давайте рассмотрим некоторые основные возможности этой версии:

  • Автореализуемые свойства
  • Анонимные типы
  • Выражения запросов
  • Лямбда-выражения
  • Деревья выражений
  • Методы расширения
  • Неявно типизированные локальные переменные
  • Частичные методы
  • Инициализаторы объектов и коллекций

Оглядываясь назад, многие из этих особенностей кажутся неизбежными и неразделимыми. Все они стратегически подходят друг другу. Считается, что главной особенностью версии C# было выражение запроса, также известное как Language-Integrated Query (LINQ).

Более тонкая точка зрения рассматривает деревья выражений, лямбда-выражения и анонимные типы как фундамент, на котором построен LINQ. Но в любом случае, C# 3.0 представил революционную концепцию. C# 3.0 начал закладывать основу для превращения C# в гибридный объектно-ориентированный / функциональный язык.

В частности, теперь можно было писать декларативные запросы в стиле SQL для выполнения операций над коллекциями, среди прочего. Вместо того чтобы писать цикл for для вычисления среднего значения списка целых чисел, теперь это можно сделать простым запросом list.Average(). Сочетание выражений запросов и методов расширения создавало впечатление, что список целых чисел стал намного умнее.

Потребовалось время, чтобы люди действительно поняли и интегрировали эту концепцию, но постепенно они это сделали. И теперь, спустя годы, код стал намного лаконичнее, проще и функциональнее.

C# версии 4.0

C# версии 4.0, выпущенной вместе с Visual Studio 2010, было бы трудно соответствовать новаторскому статусу версии 3.0. С версии 3.0 язык C# прочно вышел из тени Java и занял видное место. Язык быстро становился элегантным.

В следующей версии появилось несколько интересных новых возможностей:

  • Динамическое связывание
  • Именованные/опциональные аргументы
  • Общие коварианты и контраварианты
  • Встроенные типы взаимодействия

Встроенные типы взаимодействия облегчают процесс развертывания и создания сборок COM взаимодействия для вашего приложения. Generic covariance и contravariance дают вам больше возможностей для использования generics, но они немного академичны и, вероятно, больше ценятся авторами фреймворков и библиотек. Именованные и необязательные параметры позволяют устранить многие перегрузки методов и обеспечивают удобство. Но ни одна из этих функций не меняет парадигму.

Главной особенностью стало введение ключевого слова dynamic. Ключевое слово dynamic ввело в C# версии 4.0 возможность переопределения компилятором типизации во время компиляции. Используя ключевое слово dynamic, вы можете создавать конструкции, аналогичные динамически типизированным языкам, таким как JavaScript. Вы можете создать dynamic x = «a string», а затем добавить к нему six, оставив на усмотрение времени выполнения, что должно произойти дальше.

Динамическое связывание дает вам потенциальную возможность ошибок, но также и огромные возможности языка.

новости программирования

C# версии 5.0

C# версии 5.0, выпущенный вместе с Visual Studio 2012, был сфокусированной версией языка. Почти все усилия для этой версии были направлены на создание еще одной революционной концепции языка: модели асинхронного программирования async и await. Вот список основных возможностей:

  • Асинхронные члены
  • Атрибуты информации о вызывающей стороне

Атрибут caller info позволяет вам легко получить информацию о контексте, в котором вы работаете, не прибегая к тонне шаблонного кода отражения. Он имеет множество применений в задачах диагностики и протоколирования.

Но async и await — настоящие звезды этого выпуска. Когда эти функции появились в 2012 году, C# снова изменил игру, включив асинхронность в язык в качестве первоклассного участника. Если вы когда-либо имели дело с длительными операциями и реализацией паутины обратных вызовов, вам наверняка понравилась эта возможность языка.

C# версии 6.0

В версиях 3.0 и 5.0 в C# были добавлены основные новые возможности объектно-ориентированного языка. В версии 6.0, выпущенной вместе с Visual Studio 2015, он отказался от доминирующей функции-убийцы и вместо этого выпустил множество более мелких функций, которые сделали программирование на C# более продуктивным. Вот некоторые из них:

  • Статические импорты
  • Фильтры исключений
  • Автоинициализаторы свойств
  • Члены, содержащие выражения
  • Распространитель нулей
  • Интерполяция строк
  • оператор nameof

Другие новые возможности включают:

  • Инициализаторы индексов
  • Ожидание в блоках catch/finally
  • Значения по умолчанию для свойств, предназначенных только для геттера

Каждая из этих функций интересна сама по себе. Но если посмотреть на них в целом, то можно увидеть интересную закономерность. В этой версии C# удалены языковые шаблоны, чтобы сделать код более кратким и читабельным. Так что для поклонников чистого, простого кода эта версия языка стала огромной победой.

Вместе с этой версией они сделали еще одну вещь, хотя сама по себе она не является традиционной особенностью языка. Они выпустили компилятор Roslyn в качестве сервиса. Компилятор C# теперь написан на C#, и вы можете использовать компилятор как часть ваших усилий по программированию.

новости программирования

C# версии 7.0

C# версии 7.0 был выпущен вместе с Visual Studio 2017. В этой версии есть некоторые эволюционные и классные вещи в духе C# 6.0, но без компилятора как сервиса. Вот некоторые из новых возможностей:

  • Вынесенные переменные
  • Кортежи и деконструкция
  • Сопоставление шаблонов
  • Локальные функции
  • Расширенные члены, содержащие выражения
  • Локальные ссылки
  • Возвраты ссылок

Другие функции включают:

  • Отбрасывает
  • Двоичные литералы и разделители цифр
  • Отбрасывать выражения

Все эти функции открывают новые возможности для разработчиков и позволяют писать еще более чистый код, чем раньше. Особого внимания заслуживает сокращение объявления переменных для использования ключевого слова out и возможность использования нескольких возвращаемых значений через кортеж.

Но C# находит все более широкое применение. .NET Core теперь нацелен на любую операционную систему и нацелен на облако и переносимость. Эти новые возможности, безусловно, занимают мысли и время разработчиков языка, в дополнение к созданию новых функций.

Вам также может понравиться...