Фишки C# 12 моими глазами

Я пока не нашёл даты выхода C# 12, скорей всего он станет частью .NET 8 и его можно пощупать, если скачать превью. Майкрософт представили несколько новых фишек, самая крутая из них наверно вот эта:

public class Student(int id, string name, IEnumerable<decimal> grades)

{

    public Student(int id, string name) : this(id, name, Enumerable.Empty<decimal>()) { }

    public int Id => id;

    public string Name { get; set; } = name.Trim();

    public decimal GPA => grades.Any() ? grades.Average() : 4.0m;

Код взят с сайта Майкрософт, я сам превью не устанавливал и не щупал. Смысл тестировать на превью, если это будет не рабочий проект, проще уже просто посмотреть на примеры кода и всё.

Что здесь крутого? У нас класс и сразу после его объявления в скобках идут параметры. Зачем? У класса могут быть какие-то параметры? Да, они могут быть при создании и передаются конструктору, так что это новый вариант описания конструктора, который просто получает значения и тут же просто сохраняет их в полях класса. 

Чтобы мы явно не писали конструктор в таких случаях, мы просто указываем нужные параметры сразу после имени класса и потом при объявлении полей копируем значения. Например, вот так параметр конструктора id попадёт в поле Id: 

public int Id => id;

Конструкторы очень редко делают что-то более, чем сохранение значений. В Веб мы очень много получаем зависимостей и теперь в контроллере скорей всего мы больше не будем писать контроллера, а будем писать что-то типа:

public class LoginController(IAuth auth)

    private readonly IAuth Auth => auth;

 

  public IActionResult Index() {

  }

}

Мне кажется, что это норм. 

 

Псевдонимы

Второе улучшение – расширение using до использования любых типов данных и таким образом мы сможем делать псевдонимы для типов данных:

using Measurement = (string, int);

using PathOfPoints = int[];

using DatabaseInt = int?;

Проще говоря тип данных PathOfPoints это псевдоним для массива из чисел. 

Тут пока не уверен, что буду использовать часто, но попробую. 

 

Лямбда и значения по умолчанию

Ну и еще одна возможность – значения по умолчанию для лямбда выражений: 

var addWithDefault = (int addTo = 2) => addTo + 1;

addWithDefault(); // 3

addWithDefault(5); // 6

Я и в простом коде стараюсь не использовать значения по умолчанию, только в крайнем случае, а в лямбдах… ну возможно буду когда-то использовать. 

В общем жду, попробую когда выйдет C# 12


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку уже лайкнули 1 человек


Комментарии

Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.

Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне