Login
ИИ для программиста?
48418 просмотров
Перейти к просмотру всей ветки
in Antwort alex445 05.05.25 02:18
да неужели
В C# с выходом версии 9.0 и новее появилась возможность создавать экземпляры типов без использования ключевого слова new
, благодаря сокращённому синтаксису с target-typed new expressions (контекстно-определяемое создание объектов).
📌 Пример:
До (C# 8 и ранее):
Person person = new Person();
После (C# 9+):
Person person = new();
❓ Почему так сделали?
✅ 1. Упрощение и читаемость кода
- Становится меньше дублирования типа.
- Код становится короче и чище.
Dictionary<string, List<int>> dict = new(); // раньше пришлось бы повторить тип целиком
✅ 2. Лучше работает с автодополнением (IDE)
- Особенно полезно при работе со сложными обобщёнными типами (
List<Dictionary<string, MyType>>
и т.д.).
🔧 Как это работает?
C# использует контекстный тип слева (target type
) и выводит, какой тип должен быть создан с помощью new()
.
Компилятор сам подставляет правильный тип вnew()
на основании типа переменной слева от знака=
.
⚠️ Ограничения
- Работает только если тип можно однозначно определить из контекста.
- Не сработает в
var x = new();
— компилятор не знает, что за тип. - Не работает с конструкторами, требующими специфичных параметров без контекста.
🧠 Заключение
Краткая форма new()
— это синтаксический сахар, введённый в новых версиях C# (с 9.0) для повышения удобства, читаемости и снижения дублирования типов при инициализации объектов.
Хочешь список других таких нововведений в C# 9–12?
Фашизм будет разбит
Человека карают только те боги, в которых он верит