.net visual - Каковы правильные номера версий для C#?




2017 dot (9)

VERSION _____ СПЕЦИФИКАЦИЯ ЯЗЫКА ______ MICROLSOFT COMPILER

C # 1.0 / 1.2 ____ Декабрь 2001 года ? / 2003 ? ___________ Январь 2002 года ?

C # 2.0 _______ сентябрь 2005 г. ________________ Ноябрь 2005 г. ?

C # 3.0 _______ май 2006 года _____________________ ноябрь 2006 года ?

C # 4.0 _______ март 2009 года (проект) ______________ апрель 2010 года ?

C # 5.0; выпущен в .NET 4.5 в августе 2012 года

C # 6.0; выпущен в .NET 4.6 2015

C # 7.0; выпущен с .NET 4.7 2017

Каковы правильные номера версий для C #? Что вышло, когда? Почему я не могу найти ответы на вопрос о C # 3.5 ?

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


Самая большая проблема при работе с номерами версий C # заключается в том, что она не привязана к версии .NET Framework, которая, по-видимому, связана с синхронизированными релизами между Visual Studio и .NET Framework.

Версия C # фактически связана с компилятором, а не с каркасом. Например, в Visual Studio 2008 вы можете писать C # 3.0 и целевые .NET Framework 2.0, 3.0 и 3.5. Номенклатура C # 3.0 описывает версию синтаксиса кода и поддерживаемые функции таким же образом, что ANSI C89, C90, C99 описывает синтаксис / функции кода для C.

Взгляните на Mono , и вы увидите, что Mono 2.0 (в основном реализованная версия 2.0 .NET Framework из спецификаций ECMA) поддерживает синтаксис и функции C # 3.0.


Сравнивая статьи MSDN «Что нового в языке C # 2.0 и компиляторе» и « Что нового в Visual C # 2005 », можно сделать вывод, что «C # major_version.minor_version» придумано в соответствии с нумерацией версий компилятора.

Существует C # 1.2, соответствующая .NET 1.1 и VS 2003, а также называемый Visual C # .NET 2003 .

Но в дальнейшем Microsoft перестала увеличивать номера младших (после точки) или иметь их, отличные от нуля, 0 . Хотя следует отметить, что C #, соответствующий .NET 3.5, назван в msdn.microsoft.com как «Visual C # 2008 с пакетом обновления 1» .

Существует два параллельных ввода: по основной нумерации версий .NET / компилятора и нумерации Visual Studio.

C # 2.0 является синонимом Visual C # 2005

C # 3.0 соответствует (или, вернее, цели):


Вы можете проверить последние версии C # here


  • C # 1.0 с Visual Studio.NET

  • C # 2.0 с Visual Studio 2005

  • C # 3.0 с Visual Studio 2008

  • C # 4.0 с Visual Studio 2010

  • C # 5.0 с Visual Studio 2012

  • C # 6.0 с Visual Studio 2015

  • C # 7.0 с Visual Studio 2017


История версий C #:

C # - простой и мощный объектно-ориентированный язык программирования, разработанный Microsoft.

C # значительно изменился с момента его первого выпуска в 2002 году. C # был представлен с .NET Framework 1.0.

В следующей таблице перечислены важные функции, представленные в каждой версии C #.

И последняя версия C # доступна в версиях C # .


Это то же самое, что и большинство ответов здесь, но в табличной форме для удобства, и для полноты он имеет версии Visual Studio и .NET.

╔════════════╦════════════╦══════════════╦═════════════╦══════════════╗
║ C# version ║ VS version ║ .NET version ║ CLR version ║ Release date ║
╠════════════╬════════════╬══════════════╬═════════════╬══════════════╣
║    1.0     ║    2002    ║    1.0       ║     1.0     ║   Feb 2002   ║
║    1.2     ║    2003    ║    1.1       ║     1.1     ║   Apr 2003   ║
║    2.0     ║    2005    ║    2.0       ║     2.0     ║   Nov 2005   ║
║            ║            ║    3.0       ║     2.0     ║   Nov 2006   ║
║    3.0     ║    2008    ║    3.5       ║     2.0     ║   Nov 2007   ║
║    4.0     ║    2010    ║    4.0       ║     4       ║   Apr 2010   ║
║    5.0     ║    2012    ║    4.5       ║     4       ║   Aug 2012   ║
║    5.0     ║    2013    ║    4.5.1     ║     4       ║   Oct 2013   ║
║            ║            ║    4.5.2     ║     4       ║   May 2014   ║
║    6.0     ║    2015    ║    4.6       ║     4       ║   Jul 2015   ║
║            ║            ║    4.6.1     ║     4       ║   Nov 2015   ║
║            ║            ║    4.6.2     ║     4       ║   Aug 2016   ║
║    7.0     ║    2017    ║              ║             ║   Mar 2017   ║
║            ║            ║    4.7       ║     4       ║   May 2017   ║
║    7.1     ║ 2017(v15.3)║              ║             ║   Aug 2017   ║
║            ║            ║    4.7.1     ║     4       ║   Oct 2017   ║
║    7.2     ║ 2017(v15.5)║              ║             ║   Dec 2017   ║
║            ║            ║    4.7.2     ║     4       ║   Apr 2018   ║
║    7.3     ║ 2017(v15.7)║              ║             ║   May 2018   ║
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝

Примечание. В наши дни разработка .NET практически не зависит от VS, нет никакой корреляции между версиями каждого из них. Подробнее см. « Варианты и зависимости .NET Framework ».


История версий языка C #:

Это версии C #, известные на момент написания этой статьи:

В ответ на вопрос ОП:

Каковы правильные номера версий для C #? Что вышло, когда? Почему я не могу найти ответы на вопрос о C # 3.5?

Нет такой вещи, как C # 3.5 - причина путаницы здесь в том, что C # 3.0 присутствует в .NET 3.5. Однако язык и инфраструктура версируются независимо друг от друга - как и CLR, который находится в версии 2.0 для .NET с 2.0 по 3.5, .NET 4, предлагая CLR 4.0, несмотря на пакет обновлений. CLR в .NET 4.5 имеет различные улучшения, но управление версиями неясно: в некоторых местах его можно назвать CLR 4.5 (например, эта страница MSDN ссылалась на него таким образом), но свойство Environment.Version прежнему отчеты 4.0.xxx.

Более подробная информация о взаимоотношениях между языком, версией и версиями рамок доступна на сайте C # в глубине . Сюда входит информация о том, какие функции C # 3.0 вы можете использовать при настройке .NET 2.0. (Если кто-то хочет привести весь контент в этот вики-ответ, они будут рады.)

С 3 мая 2017 года группа языков C # создала историю версий и функций C # в своем реестре github: возможности, добавленные в версии языка C # . Также есть страница, которая отслеживает предстоящие и недавно реализованные языковые функции .


Ближайшим подходом к вопросу OP является Tom Blodget, который фактически входит в объект и извлекает байты. Я говорю ближе, потому что это зависит от реализации объекта String.

"Can't I simply get what bytes the string has been stored in?"

Конечно, но здесь возникает фундаментальная ошибка в вопросе. Строка - это объект, который может иметь интересную структуру данных. Мы уже знаем, что это происходит, потому что это позволяет хранить непарных суррогатов. Он может хранить длину. Он может содержать указатель на каждый из «парных» суррогатов, позволяющий быстро подсчитывать. И т. Д. Все эти дополнительные байты не являются частью символьных данных.

То, что вы хотите, это байты каждого символа в массиве. И именно здесь происходит «кодирование». По умолчанию вы получите UTF-16LE. Если вы сами не заботитесь о самих байтах, за исключением поездки туда и обратно, вы можете выбрать любую кодировку, включая «по умолчанию», и преобразовать ее позже (при условии, что те же параметры, что и кодировка по умолчанию, кодовые точки, исправления ошибок , разрешенные вещи, такие как непарные суррогаты и т. д.

Но зачем оставлять «кодировку» до магии? Почему бы не указать кодировку, чтобы вы знали, какие байты вы получите?

"Why is there a dependency on character encodings?"

Кодировка (в этом контексте) просто означает байты, которые представляют вашу строку. Не байты строкового объекта. Вам нужны байты, в которые была сохранена строка, - вот где вопрос был задан наивно. Вы хотели, чтобы байты строки в непрерывном массиве представляли строку, а не все другие двоичные данные, которые могут содержать строковый объект.

Это означает, что сохранение строки не имеет значения. Вы хотите, чтобы строка «закодирована» в байты в массиве байтов.

Мне нравится ответ Tom Bloget, потому что он взял вас к направлению «байтов строкового объекта». Однако это зависит от реализации, и потому, что он заглядывает внутрь, может быть сложно восстановить копию строки.

Ответ Мехрдада неверен, поскольку он вводит в заблуждение на концептуальном уровне. У вас все еще есть список байтов, закодированных. Его особое решение позволяет сохранить непарные суррогаты - это зависит от реализации. Его конкретное решение не могло бы точно генерировать байты строки, если GetBytesпо умолчанию возвращать строку в UTF-8.

Я изменил свое мнение об этом (решение Мехрдада) - это не получает байты строки; скорее, он получает байты массива символов, которые были созданы из строки. Независимо от кодировки, тип данных char в c # является фиксированным размером. Это позволяет создать массив байтов с последовательной длиной, и он позволяет воспроизводить массив символов на основе размера массива байтов. Поэтому, если кодировка была UTF-8, но каждый символ имел 6 байтов для размещения наибольшего значения utf8, он все равно будет работать. Так что - кодирование персонажа не имеет значения.

Но было использовано преобразование - каждый символ помещался в поле фиксированного размера (тип символа c #). Однако какое это представление не имеет значения, что технически является ответом на ОП. Итак - если вы все равно собираетесь конвертировать ... Почему бы не «закодировать»?







c# .net visual-studio .net-framework-version compiler-version