НейроАгент

Полная история версий C# и даты релизов

Полная временная шкала версий C# со всеми датами релизов от 1.0 до 12.0. Узнайте, почему C# 3.5 не существует, и в чем разница между .NET Framework и версиями языка C#.

Вопрос

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

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

НейроАгент

Номера версий C# следуют определенной последовательности без выпуска версии “3.5”, поскольку правильная последовательность идет напрямую от C# 3.0 к C# 4.0. Путаница часто возникает из-за .NET Framework 3.5, который содержит C# 3.0, но был выпущен отдельно от спецификации языка. Вот полная хронология версий C# с правильными датами выпуска, чтобы помочь вам найти точную информацию об эволюции языка.

Содержание

История версий C# и хронология выпуска

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

Ранние версии C# (2000-2005)

  • C# 1.0 - январь 2002

    • Выпущен вместе с .NET Framework 1.0
    • Базовые объектно-ориентированные возможности и синтаксис
    • Основа для современной разработки на C#
  • C# 1.2 - апрель 2003

    • Выпущен с .NET Framework 1.1
    • Незначительные улучшения и исправления ошибок
    • Расширенные возможности отладки

Major эволюция (2005-2010)

  • C# 2.0 - ноябрь 2005

    • Выпущен с .NET Framework 2.0
    • Поддержка обобщенных типов (Generics)
    • Анонимные методы
    • Типы значений, допускающие значение NULL
    • Итераторы (ключевое слово yield)
  • C# 3.0 - ноябрь 2007

    • Выпущен с .NET Framework 3.5
    • LINQ (Language Integrated Query)
    • Лямбда-выражения
    • Методы расширения
    • Анонимные типы
    • Локальные переменные с неявной типизацией (var)
  • C# 4.0 - апрель 2010

    • Выпущен с .NET Framework 4.0
    • Динамическое программирование
    • Именованные и необязательные параметры
    • Ковариантность и контрвариантность для обобщенных типов
    • Улучшения взаимодействия с COM

Эпоха современного C# (2012-настоящее время)

  • C# 5.0 - август 2012

    • Выпущен с .NET Framework 4.5
    • Асинхронный шаблон async/await
    • Атрибуты информации о вызывающем коде
  • C# 6.0 - июль 2015

    • Выпущен с .NET Framework 4.6
    • Интерполяция строк
    • Оператор условного доступа к NULL (?.)
    • Инициализаторы автосвойств
    • Выражаемые члены
  • C# 7.0 - март 2017

    • Выпущен с .NET Core 2.0
    • Сопоставление с образцом (Pattern matching)
    • Кортежи
    • Переменные out
    • Локальные функции
    • Двоичные литералы
  • C# 7.1 - август 2017

    • Асинхронный метод Main
    • Выражения литералов по умолчанию
    • Выводимые имена элементов кортежа
  • C# 7.2 - ноябрь 2017

    • Ссылочная семантика для типов значений
    • Именованные аргументы без запятых в конце
    • Разделители в начале чисел
  • C# 7.3 - май 2018

    • Массивы stackalloc во вложенных контекстах
    • Улучшения для оператора fixed
    • Улучшения ограничений обобщенных типов
  • C# 8.0 - сентябрь 2019

    • Типы ссылок, допускающие значение NULL
    • Асинхронные потоки
    • Объявления using
    • Оператор присваивания с объединением с NULL
    • Выражения switch
    • Методы интерфейса по умолчанию
  • C# 9.0 - ноябрь 2020

    • Records
    • Модификаторы доступа init-only
    • Улучшения сопоставления с образцом
    • Программы верхнего уровня
    • Выражения new с целевым типом
  • C# 10.0 - ноябрь 2021

    • Record structs
    • Расширенные шаблоны свойств
    • Пространства имен на уровне файла
    • Обязательные члены
    • Глобальные директивы using
  • C# 11.0 - ноябрь 2022

    • Обобщенная математика
    • Сырые строковые литералы
    • Обязательные члены в интерфейсах
    • Шаблоны списков
    • Строковые литералы UTF-8
  • C# 12.0 - ноябрь 2023

    • Первичные конструкторы
    • Выражения коллекций
    • Псевдонимы для любого типа
    • Экспериментальные атрибуты
    • Параметры ref и scoped

Почему не существует C# 3.5

Путаница вокруг “C# 3.5” возникает из-за непонимания различий между версионированием .NET Framework и версионированием языка C#. Вот почему вы не найдете никакой информации о C# 3.5:

Различие между Framework и Language

.NET Framework 3.5 был выпущен в ноябре 2007 года и содержал компилятор C# 3.0 и функции языка. Microsoft использовала эту систему именования, в которой номер версии фреймворка не соответствовал напрямую версии C# внутри него.

Ключевой момент: .NET Framework 3.5 включал C# 3.0, а не C# 3.5. Версия фреймворка была просто версией упаковки, в то время как версия языка была отдельной.

Логика нумерации версий

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

  • C# 3.0 была спецификацией языка
  • .NET Framework 3.5 была средой выполнения, которая поставляла C# 3.0

Это объясняет, почему разработчики, ищущие документацию по “C# 3.5”, ничего не находят - потому что никогда не было версии языка C# 3.5, только версия .NET Framework 3.5, которая содержала C# 3.0.


Версии .NET Framework vs версии языка C#

Понимание связи между этими системами версионирования важно для поиска точной информации:

Версионирование Framework

Версионирование .NET Framework было разработано для упаковки нескольких технологий:

  • Версия 3.0: Добавлены Windows Presentation Foundation (WPF), Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF)
  • Версия 3.5: Добавлены LINQ, ADO.NET Entity Framework и другие функции, при этом все еще содержался C# 3.0

Версионирование языка

Версии языка C# привязаны к спецификации языка и компилятору, а не к фреймворку:

  • Каждая major версия C# вводит новые функции языка и синтаксис
  • Версии языка могут использоваться с разными версиями фреймворка
  • Начиная с .NET Core, версионирование языка и фреймворка стало более согласованным

Современное версионирование (после .NET Core)

С введением .NET Core в 2016 году версионирование стало более простым:

  • .NET Core 2.0: C# 7.0
  • .NET Core 3.0: C# 8.0
  • .NET 5: C# 9.0 (пропущена версия 4, чтобы избежать путаницы с .NET Framework 4.x)
  • .NET 6: C# 10.0
  • .NET 7: C# 11.0
  • .NET 8: C# 12.0
  • .NET 9: C# 13.0 (preview)

C# 5.0 и современные выпуски

Для тех, кто ищет информацию о более современных версиях C#, вот что представил каждый major выпуск:

C# 5.0 (2012) - Асинхронная революция

C# 5.0 принес революционные возможности асинхронного программирования:

csharp
// До C# 5.0
Task<string> GetDataAsync()
{
    var task = new Task<string>(() => {
        Thread.Sleep(1000);
        return "Data";
    });
    task.Start();
    return task;
}

// C# 5.0 и новее
async Task<string> GetDataAsync()
{
    await Task.Delay(1000);
    return "Data";
}

C# 6.0 (2015) - Фокус на продуктивности

C# 6.0 сосредоточился на продуктивности разработчика и упрощении кода:

csharp
// Интерполяция строк вместо string.Format
var name = "World";
var greeting = $"Hello, {name}!";

// Оператор условного доступа к NULL
var length = name?.Length ?? 0;

// Инициализаторы автосвойств
public class Person { public string Name { get; set; } = "Unknown"; }

C# 7.0+ (2017-настоящее время) - Современный C#

Каждая последующая версия принесла значительные новые функции:

  • C# 7.0: Сопоставление с образцом, кортежи, локальные функции
  • C# 8.0: Типы ссылок, допускающие значение NULL, асинхронные потоки, выражения switch
  • C# 9.0: Records, модификаторы доступа init-only, программы верхнего уровня
  • C# 10.0: Record structs, пространства имен на уровне файла
  • C# 11.0: Обобщенная математика, сырые строковые литералы
  • C# 12.0: Первичные конструкторы, выражения коллекций

Как найти точную документацию по C#

При поиске информации о C# следуйте этим рекомендациям, чтобы найти правильную документацию:

Используйте правильные номера версий

Всегда ищите конкретную версию языка C#, а не версии .NET Framework:

  • ✅ Правильно: “Функции C# 8.0”
  • ❌ Неправильно: “Функции C# 3.5”
  • ✅ Правильно: “Сопоставление с образцом в C# 12.0”
  • ❌ Неправильно: “LINQ в C# 3.5” (LINQ был в C# 3.0)

Официальные источники документации

Консультируйтесь с авторитетными источниками для точной информации:

  1. Microsoft Learn - Официальная документация Microsoft
  2. Спецификация языка C# - Определенный источник для функций языка
  3. Что нового в C# - Руководства Microsoft для каждой версии
  4. Репозиторий .NET на GitHub - Исходный код и детали реализации

Поисковые термины, зависящие от версии

При исследовании включайте номер версии и название функции:

  • “Типы ссылок, допускающие значение NULL в C# 8.0”
  • “Примеры records в C# 9.0”
  • “Пространства имен на уровне файла в C# 10.0”

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

Источники

  1. Microsoft Learn - История версий C#
  2. Документация .NET - Версионирование языка C#
  3. Обзор спецификации языка C#
  4. История версий .NET Framework
  5. Временная шкала функций C# от JetBrains

Заключение

Понимание правильной нумерации версий C# необходимо для поиска точной документации и избежания путаницы. Основные выводы:

  1. Не существует C# 3.5 - Правильная версия была C# 3.0, выпущенная с .NET Framework 3.5 в ноябре 2007 года
  2. Версии Framework vs Language различны - .NET Framework 3.5 содержал C# 3.0, а не отдельную версию языка
  3. Используйте правильные номера версий при поиске: C# 1.0 через C# 12.0 - это официальные версии языка
  4. Современные выпуски следуют версионированию .NET: .NET 5+ согласует номера версий C# и .NET
  5. Ищите стратегически, используя специфичные для версии термины, такие как “функции C# 8.0”, вместо терминов, основанных на фреймворке

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