Информация о полезной статье
C# история возможностей
2002 : C# 1
Основы языка: Classes, Structs, Interfaces, Events, Properties, Delegates. Конструкции: Expressions, Statements, Attributes, Literals.
2003 : C# 1.2
- Dispose in foreach / Dispose() внутри foreach
- foreach over string specialization / Оптимизированный foreach для строк
2005 : C# 2
- Generics / Обобщения (Generics)
- Partial types / Частичные типы (partial class)
- Anonymous methods / Анонимные методы (delegate )
- Iterators / Итераторы (yield return)
- Nullable types / Обнуляемые типы (int? x = null;)
- Getter/setter separate accessibility / Раздельная доступность get/set
- Method group conversions (delegates) / Конверсия групп методов в делегаты
- Static classes / Статические классы
- Delegate inference / Вывод типов делегатов
2007 : C# 3
- Implicitly typed local variables / Неявно типизированные локальные переменные (var x = 1;)
- Object and collection initializers / Инициализаторы объектов и коллекций
- Auto-Implemented properties / Автоматически реализуемые свойства (public int Id { get; set; })
- Anonymous types / Анонимные типы (new )
- Extension methods / Методы расширения
- Query expressions / Выражения запросов (LINQ синтаксис)
- Lambda expression / Лямбда-выражения (x => x * 2)
- Expression trees / Деревья выражений
- Partial methods / Частичные методы
2010 : C# 4
- Dynamic binding / Динамическое связывание (dynamic ключевое слово)
- Named and optional arguments / Именованные и необязательные аргументы
- Co- and Contra-variance for generic delegates and interfaces / Ко- и контравариантность
- Embedded interop types ("NoPIA") / Встраиваемые типы взаимодействия COM
2013 : C# 5
- Asynchronous methods / Асинхронные методы (async/await)
- Caller info attributes / Атрибуты информации о вызывающем
2015 : C# 6
- Draft Specification online / Спецификация онлайн
- Compiler-as-a-service (Roslyn) / Roslyn (компилятор как сервис)
- Import of static type members into namespace / Импорт статических членов (using static Math;)
- Exception filters / Фильтры исключений (catch (E e) when (condition))
- Await in catch/finally blocks / await в блоках catch/finally
- Auto property initializers / Инициализаторы автосвойств
- Default values for getter-only properties / Значения по умолчанию для свойств только с get
- Expression-bodied members / Члены с телом выражения (=>)
- Null propagator (null-conditional operator, succinct null checking) / Оператор null-распространения (?.)
- String interpolation / Интерполяция строк ($"")
- nameof operator / Оператор nameof
- Dictionary initializer / Инициализаторы словарей
2017 : C# 7 (.NET Core 2.0)
- Out variables / out переменные (if (int.TryParse("1", out int i)))
- Pattern matching / Сопоставление с образцом (is int i)
- Tuples / Кортежи (var t = (1, "a");)
- Deconstruction / Деконструкция
- Discards / "Отбросы" (_ для неиспользуемых переменных)
- Local Functions / Локальные функции
- Binary Literals / Бинарные литералы (0b1010)
- Digit Separators / Разделители цифр (1_000_000)
- Ref returns and locals / ref возвраты и локальные переменные
- Generalized async return types / Обобщенные типы возврата async (ValueTask)
- More expression-bodied members / Больше членов с телом выражения
- Throw expressions / throw как выражение
2019 : C# 8 (.NET Core 3.0)
- Nullable reference types / Обнуляемые ссылочные типы (NRT)
- Default interface members / Реализации членов интерфейса по умолчанию (DIM)
- Recursive patterns / Рекурсивные шаблоны
- Async streams / Асинхронные потоки (IAsyncEnumerable
) - Enhanced using / Расширенный using (using var f = ...;)
- Ranges and indexes / Диапазоны и индексы (arr[^1], arr[1..5])
- Null-coalescing assignment / Оператор объединения с присваиванием ??=
- Static local functions / Статические локальные функции
- Unmanaged generic structs / Неуправляемые обобщенные структуры
- Readonly members / readonly члены структур
- Stackalloc in nested contexts / stackalloc во вложенных контекстах
- Alternative interpolated verbatim strings / Альтернативные дословные интерполированные строки
- Obsolete on property accessors / [Obsolete] на аксессорах свойств
2020 : C# 9 (.NET 5)
- Records / Записи (record Person;)
- Init only setters / Сеттеры только для инициализации (set -> init)
- Top-level statements / Операторы верхнего уровня (убрали Program и Main)
- Pattern matching enhancements: relational patterns and logical patterns / Улучшения сопоставления с образцом (and, or, >, <)
- Native sized integers / Целые числа нативного размера (nint, nuint)
- Function pointers / Указатели функций
- Module initializers / Инициализаторы модулей
- Target-typed new expressions / new выражения целевого типа (Point p = new(1, 2);)
- Covariant return types / Ковариантные возвращаемые типы
2021 : C# 10 (.NET 6)
- Record structs / Записи-структуры (record struct)
- Interpolated string handler / Обработчики интерполированных строк (производительность)
- Global using directives / Глобальные директивы using
- File-scoped namespace declaration / Объявление пространств имен на уровне файла (namespace N;)
- Extended property patterns / Расширенные шаблоны свойств
- Constant interpolated strings / Константные интерполированные строки
- Assignment and declaration in same deconstruction / Присваивание и объявление в одной деконструкции
- CallerArgumentExpression attribute diagnostics / Атрибут CallerArgumentExpression
2022 : C# 11 (.NET 7)
- Generic attributes / Универсальные (Generic) атрибуты
- Generic math support / Поддержка универсальной математики
- Newlines in string interpolations / Новые строки в интерполяциях строк
- List patterns / Шаблоны списков ([1, 2, ..])
- Raw string literals / Сырые строковые литералы ("...")
- Auto-default struct / Автоматическая инициализация полей структуры нулями
- Required members / Обязательные члены (required модификатор)
- ref fields and ref scoped variables / ref поля и ref scoped переменные
- File local types / Типы, локальные для файла (file class)
2023 : C# 12 (.NET 8)
- Primary constructors / Первичные конструкторы (class C(int x))
- Collection expressions / Коллекционные выражения (List
x = [1, 2, 3];) - ref readonly parameters / ref readonly параметры
- Default lambda parameters / Параметры лямбда-выражений по умолчанию
- Alias any type / Псевдоним любого типа (using S = System.String;)
- Inline arrays / Встроенные массивы
- Experimental attribute / Атрибут экспериментальности
- Interceptors / Перехватчики (экспериментально, для AOP)
2024 : C# 13 (.NET 9)
- params collections / params с коллекциями (теперь работает с List
, Span и т.д., а не только с массивами) - New lock type and semantics / Новый тип блокировки потоков System.Threading.Lock (более быстрый и читаемый аналог lock (obj))
- New escape sequence \e / Новая escape-последовательность \e для символа ESC (U+001B)
- Improved natural type for method groups / Улучшенный вывод естественного типа для групп методов (упрощает разрешение перегрузок)
- Implicit indexer access in object initializers / Неявный доступ по индексу в инициализаторах объектов ({ [^1] = value })
- ref and unsafe support in iterators and async methods / Поддержка ref и unsafe в итераторах и асинхронных методах (сняты старые ограничения)
- ref struct can implement interfaces / ref struct могут реализовывать интерфейсы
- ref struct types as type arguments in generics / ref struct как аргументы универсальных типов
- Partial properties and indexers / Частичные свойства и индексаторы (для генераторов кода)
- Overload resolution priority / Приоритет разрешения перегрузок (указание предпочтительной перегрузки для компилятора)
2025 : C# 14 (.NET 10 — Планируется)
- Extension members / Члены расширения (позволит добавлять свойства и статические методы к существующим типам)
- Null-conditional assignment / Присваивание с null-условием (x?.y = z;)
- nameof support for non-generic types / nameof для неуниверсальных типов
- More implicit conversions for Span
and ReadOnlySpan / Больше неявных преобразований для Span и ReadOnlySpan - Modifiers on simple lambda parameters / Модификаторы параметров лямбда-выражений (scoped, ref, in, out)
- Field-backed properties / Свойства с поддержкой поля
- Partial events and constructors / Частичные события и конструкторы
- Custom compound assignment operators / Пользовательские операторы составного присваивания
- New preprocessor directives for file-based applications / Новые директивы препроцессора для файловых приложений