🔄 Что нового в .NET 10
Оптимизации JIT-компиляции и улучшенная генерация кода ускоряют работу приложений. Добавлена поддержка новых инструкций AVX10.2 и NativeAOT.
Появились новые API для криптографии с поддержкой пост-квантовых алгоритмов и расширенными возможностями по ML-DSA. Улучшена поддержка глобализации, сериализации, работы с числовыми данными и ZIP-файлами.
Добавлена поддержка WebSocketStream и TLS 1.3 для macOS, а также расширены возможности управления процессами Windows.
.NET 10 SDK позволяет создавать контейнерные образы нативно и предлагает улучшенную CLI с генерацией табуляционных сценариев. Новые инструменты SDK поддерживают разные платформы и расширяют возможности для devops и cloud-разработки.
Улучшения Blazor, OpenAPI, расширенная проверка форм и поддержка Passkey для Identity.
C# 14 получил новые возможности: доступ к backing fields в свойствах, улучшения в nameof для generic-типов, более гибкая работа с Span<T> в лямбдах, расширенные статические методы и операторы, а также новые частичные конструкторы и события.
F#, Visual Basic, .NET MAUI, EF Core, Windows Forms и WPF обновились с улучшениями производительности, юзабилити и новым функционалом.
➡️ Блог Microsoft
🐸 Библиотека шарписта
#async_news
Оптимизации JIT-компиляции и улучшенная генерация кода ускоряют работу приложений. Добавлена поддержка новых инструкций AVX10.2 и NativeAOT.
Появились новые API для криптографии с поддержкой пост-квантовых алгоритмов и расширенными возможностями по ML-DSA. Улучшена поддержка глобализации, сериализации, работы с числовыми данными и ZIP-файлами.
Добавлена поддержка WebSocketStream и TLS 1.3 для macOS, а также расширены возможности управления процессами Windows.
.NET 10 SDK позволяет создавать контейнерные образы нативно и предлагает улучшенную CLI с генерацией табуляционных сценариев. Новые инструменты SDK поддерживают разные платформы и расширяют возможности для devops и cloud-разработки.
Улучшения Blazor, OpenAPI, расширенная проверка форм и поддержка Passkey для Identity.
C# 14 получил новые возможности: доступ к backing fields в свойствах, улучшения в nameof для generic-типов, более гибкая работа с Span<T> в лямбдах, расширенные статические методы и операторы, а также новые частичные конструкторы и события.
F#, Visual Basic, .NET MAUI, EF Core, Windows Forms и WPF обновились с улучшениями производительности, юзабилити и новым функционалом.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤2🌚1
Records автоматически поддерживают деструкцию благодаря основному конструктору. Это позволяет распаковать свойства объекта прямо при присваивании.
Вместо того чтобы обращаться к каждому свойству отдельно:
public record Point(int X, int Y);
var point = new Point(15, 20);
int x = point.X;
int y = point.Y;
Просто распакуйте:
var (x, y) = new Point(15, 20);
Console.WriteLine($"Координаты: {x}, {y}");
Это особенно удобно в сочетании с pattern matching и switch выражениями:
public record User(string Name, int Age);
if (new User("Боб", 25) is { Age: > 18 })
Console.WriteLine("Взрослый пользователь");
var (name, age) = new User("Алиса", 30);
Вместо трёх строк получаете одну строку и респект от коллег
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
😢5❤1👍1
🆚 Лаконичный стиль или привычный блок
В C# есть конструкция using, которая помогает правильно освобождать ресурсы. Но выглядеть она может по-разному, и сейчас можно выбрать, какой стиль использовать.
Старый добрый способ с блоком:
Чётко, понятно, но возникают лишние скобки и с отступами порой становится сложнее. Особенно, если таких блоков много.
А теперь взгляд современного разработчика:
Минимализм, читаемость, меньше шума. Но важно помнить, что Dispose произойдёт в конце метода, а не сразу после строки.
💬 Что выбираете вы? Старый стиль с блоками или лаконичный using?
🐸 Библиотека шарписта
#entry_point
В C# есть конструкция using, которая помогает правильно освобождать ресурсы. Но выглядеть она может по-разному, и сейчас можно выбрать, какой стиль использовать.
Старый добрый способ с блоком:
using (var connection = new SqlConnection(connString))
{
connection.Open();
// Сюда кладём код работы с ресурсом
} // Dispose вызывается автоматически при выходе из блока
Чётко, понятно, но возникают лишние скобки и с отступами порой становится сложнее. Особенно, если таких блоков много.
А теперь взгляд современного разработчика:
using var connection = new SqlConnection(connString);
connection.Open();
// Здесь код с использованием ресурса
// Dispose вызовется автоматически при выходе из области видимости метода
Минимализм, читаемость, меньше шума. Но важно помнить, что Dispose произойдёт в конце метода, а не сразу после строки.
💬 Что выбираете вы? Старый стиль с блоками или лаконичный using?
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥱2
📘 Хочешь в Data Science, но есть пробелы в знаниях математики?
Мы сделали экспресс-курс «Математика для Data Science», который за 2 месяца даст тебе фундамент, без которого ни одна ML-модель не взлетит 🚀
Что тебя ждёт:
🔹 живые вебинары с экспертами (НИУ ВШЭ, SberAI, Wildberries&Russ);
🔹 практика в Python, квизы и проверка заданий экспертами;
🔹 матрицы, регрессии, вероятности и статистика: всё на примерах из реальных задач;
🔹 старт — 4 декабря.
🔥 Не упусти халяву: сейчас 40% до 30 ноября
👉 Записаться на курс
Мы сделали экспресс-курс «Математика для Data Science», который за 2 месяца даст тебе фундамент, без которого ни одна ML-модель не взлетит 🚀
Что тебя ждёт:
🔹 живые вебинары с экспертами (НИУ ВШЭ, SberAI, Wildberries&Russ);
🔹 практика в Python, квизы и проверка заданий экспертами;
🔹 матрицы, регрессии, вероятности и статистика: всё на примерах из реальных задач;
🔹 старт — 4 декабря.
🔥 Не упусти халяву: сейчас 40% до 30 ноября
👉 Записаться на курс
В C# 14 расширяется концепция расширений: можно создавать не только расширенные методы для экземпляров типов, но и свойства расширения, а также расширения, которые относятся к самому типу как к статическому элементу.
Пример:
public static class EnumerableExtensions
{
extension<TSource>(IEnumerable<TSource> source)
{
public bool IsEmpty => !source.Any(); // Расширенное свойство
}
extension<TSource>(IEnumerable<TSource>)
{
public static IEnumerable<TSource> Combine(IEnumerable<TSource> first, IEnumerable<TSource> second)
=> first.Concat(second); // Статический метод расширения
}
}
Конструкция
extension<TSource>(IEnumerable<TSource> source) — это новый синтаксис блока расширения для экземпляра типа: здесь определяются расширяющие члены, которые «прикрепляются» к объекту IEnumerable<TSource>.Внутри блока объявлено свойство
IsEmpty, которое возвращает true, если последовательность пуста (!source.Any()).Второй блок
extension<TSource>(IEnumerable<TSource>) — расширение для самого типа IEnumerable<TSource> как статического члена.Внутри него определён статический метод Combine, который принимает две последовательности и объединяет их с помощью Concat.
Как это использовать:
var list = new List<int> { 1, 2, 3 };
bool empty = list.IsEmpty; // false — вызов расширенного свойства как у экземпляра
var combined = Enumerable<int>.Combine(new[] { 1 }, new[] { 2, 3 }); // {1, 2, 3}#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3😁3❤2
Большинство кандидатов видят только популярные вакансии, а те, что скрыты, остаются незаметными из-за дефектов поиска и плохих фильтров. Булевые операторы помогают создавать точные запросы, которые учитывают и исключают нужные параметры.
Гитхаб и Google — дополнительные инструменты для охоты на вакансии, особенно стартапы, которые редко выкладывают открытые позиции на обычных сайтах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Управление данными в свойствах теперь проще с новым ключевым словом для доступа к автоматически созданному полю.
Раньше для добавления логики установки значения использовалось отдельное поле и аксессоры:
private string _msg;
public string Message
{
get => _msg;
set => _msg = value ?? throw new ArgumentNullException(nameof(value));
}
Сейчас field ссылается на поле, которое создает компилятор, сокращая код:
public string Message
{
get;
set => field = value ?? throw new ArgumentNullException(nameof(value));
}
Минимум кода — максимум контроля: write-only свойства снаружи и строгая логика внутри.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20😁2❤1
Неделю взяли Microsoft со своей конференцией и обновлениями.
— .NET Conf. День 1 и день 2
— Doom теперь в Telegram
— Юбилейный .NET
— Обновления .NET и .NET Framework
В ноябрьском обновлении 2025 года вышли новые релизы .NET 8.0.22 и .NET 9.0.11, включающие набор технических исправлений.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Poll
19%
Мемы
17%
Пост про foreach
14%
Напоминания про .NET Conf
5%
Холивар про скриншоты
16%
Пост про сравнения у рекордов
19%
Про копирование с with
42%
Мини-обзор .NET 10
15%
Про два using'a
37%
Обновлённые расширения типов в C# 14
🥱13🔥2
Records идеально сочетаются с pattern matching. Вы получаете алгебраические типы данных, которые раньше были только в функциональных языках вроде F#.
Представьте, что вам нужно рассчитать площадь разных фигур:
public abstract record Shape;
public record Circle(double Radius) : Shape;
public record Rectangle(double Width, double Height) : Shape;
double CalculateArea(Shape shape) => shape switch
{
Circle(var r) => Math.PI * r * r,
Rectangle(var w, var h) => w * h,
_ => throw new ArgumentException("Неизвестная фигура")
};
Никаких is checks, никаких кастов, никакого боксинга. Компилятор знает структуру и гарантирует полноту проверки всех случаев.
Можете комбинировать с проверками свойств:
if (shape is Rectangle { Width: > 100, Height: > 100 })
Console.WriteLine("Большой прямоугольник");Это делает бизнес-логику выразительнее и безопаснее. Вместо цепочки if-else с кастами получаете элегантный switch:
public abstract record OrderStatus;
public record Pending : OrderStatus;
public record Shipped(DateTime Date) : OrderStatus;
public record Cancelled(string Reason) : OrderStatus;
string Describe(OrderStatus status) => status switch
{
Pending => "Ожидает отправки",
Shipped(var date) => $"Отправлен {date:d}",
Cancelled(var reason) => $"Отменён: {reason}",
};
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🙏1