Каковы правильные номера версий для 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# 3.5
- Версии .NET Framework vs версии языка C#
- C# 5.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 принес революционные возможности асинхронного программирования:
// До 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 сосредоточился на продуктивности разработчика и упрощении кода:
// Интерполяция строк вместо 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)
Официальные источники документации
Консультируйтесь с авторитетными источниками для точной информации:
- Microsoft Learn - Официальная документация Microsoft
- Спецификация языка C# - Определенный источник для функций языка
- Что нового в C# - Руководства Microsoft для каждой версии
- Репозиторий .NET на GitHub - Исходный код и детали реализации
Поисковые термины, зависящие от версии
При исследовании включайте номер версии и название функции:
- “Типы ссылок, допускающие значение NULL в C# 8.0”
- “Примеры records в C# 9.0”
- “Пространства имен на уровне файла в C# 10.0”
Этот подход поможет вам найти точную, специфичную для версию информацию, а не запутаться в различиях между версиями фреймворка и языка.
Источники
- Microsoft Learn - История версий C#
- Документация .NET - Версионирование языка C#
- Обзор спецификации языка C#
- История версий .NET Framework
- Временная шкала функций C# от JetBrains
Заключение
Понимание правильной нумерации версий C# необходимо для поиска точной документации и избежания путаницы. Основные выводы:
- Не существует C# 3.5 - Правильная версия была C# 3.0, выпущенная с .NET Framework 3.5 в ноябре 2007 года
- Версии Framework vs Language различны - .NET Framework 3.5 содержал C# 3.0, а не отдельную версию языка
- Используйте правильные номера версий при поиске: C# 1.0 через C# 12.0 - это официальные версии языка
- Современные выпуски следуют версионированию .NET: .NET 5+ согласует номера версий C# и .NET
- Ищите стратегически, используя специфичные для версии термины, такие как “функции C# 8.0”, вместо терминов, основанных на фреймворке
Если вы ищете информацию о конкретной функции C# и не можете ее найти, попробуйте использовать правильный номер версии языка C# в ваших поисковых запросах. Это приведет вас к точной документации, которую вам нужно, и поможет избежать путаницы, вызванной непониманием различий между .NET Framework 3.5 и C# 3.0.