Информация о полезной статье

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 / Новые директивы препроцессора для файловых приложений