Библиотека шарписта | C#, F#, .NET, ASP.NET
21.7K subscribers
2.87K photos
45 videos
91 files
5.32K links
Все самое полезное для C#-разработчика в одном канале.

Наши курсы: https://clc.to/y3LDtw

По рекламе: @proglib_adv

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🤨 Комментарии в коде: писать или удалять всё лишнее?

Один из самых долгих споров среди разработчиков.

❇️ Одни считают, что хороший код не нуждается в комментариях. Если приходится объяснять, что происходит, значит, стоит улучшить имена, структуру или разбить метод.


🅰️ Другие отвечают: комментарии нужны. Но не чтобы пересказывать код, а чтобы объяснить почему он написан именно так. Например, описать сложное бизнес-правило, необычное решение, ограничение внешней системы или оставить ссылку на баг.


А как у вас?

👍 — комментариев минимум, код должен говорить сам за себя.
🔥 — комментарии нужны, если помогают понять неочевидную логику.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥82👍15
🔥 .NET MAUI окончательно переходит на CoreCLR

В .NET 11 Preview 6 для мобильных приложений .NET MAUI остался только один рантайм — CoreCLR. Отдельный путь через Mono для Android, iOS и Mac Catalyst больше недоступен.

🔴 Это тот же рантайм, на котором работают ASP.NET Core, серверные и десктопные приложения .NET. Переход должен сократить различия между платформами и упростить развитие самого рантайма.

По данным команды .NET, на iOS и Mac Catalyst CoreCLR уже обычно быстрее Mono. На Android результаты пока близки: разница по времени запуска и размеру приложения укладывается примерно в 10%.


🔴 В Preview 6 также появились новый CollectionView2 для Windows, версия HybridWebView, совместимая с Native AOT, и восстановление результата MediaPicker после пересоздания Activity на Android.

Переход крупный, поэтому Microsoft просит разработчиков уже сейчас запускать свои MAUI-приложения на Preview 6 и сообщать о регрессиях до ноябрьского релиза.

🔗 Источник

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍5🔥3
⚠️ Скорость разработки растёт, но вместе с ней появляется новая проблема — кодовая база быстро теряет единый стиль.

Ниже — бесплатный вебинар о том, как этого избежать 🏃‍♀️
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🤢 Чем больше разработчиков в команде начинают пользоваться Claude Code, тем заметнее одна проблема: кодовая база перестаёт выглядеть как работа одной команды.

Где-то есть тесты, где-то их забыли. Где-то агент следует архитектуре проекта, где-то предлагает решение, которое с ней не сочетается.

⚠️ И это не проблема Claude Code. Он просто следует тому контексту, который получает от каждого разработчика.

Завтра покажем, как передать AI инженерный контекст команды и не превратить его внедрение в ещё один источник хаоса.

🗓 23 июля, 19:00 МСК
Бесплатно. 60 минут доклада + 30 минут вопросов.

🔗 Занять место на вебинаре и разобраться, почему так происходит

🏃‍♀️ Proglib Academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Чем BackgroundService отличается от IHostedService?

👾 — Предназначен только для таймеров
👍 — Это базовый класс с циклом ExecuteAsync; IHostedService — лишь интерфейс Start/Stop без цикла
🥰 — Запускается только в Debug
⚡️ — Не поддерживает отмену CancellationToken

Библиотека задач по C#
👍111🥱21😍1👾1
🎹 Почему строки в .NET неизменяемы и что такое интернирование

string в .NET нельзя изменить. Любая конкатенация, замена или обрезка создаёт новый объект. Благодаря этому строки безопасно использовать из нескольких потоков, удобно хранить в качестве ключей словаря, а оператор == сравнивает их содержимое.

Но есть и цена: каждое изменение — это новая аллокация. Поэтому для сборки текста в циклах используют StringBuilder, а не +.

🔜 Ещё одна особенность — интернирование строк. CLR хранит пул уникальных строк, поэтому одинаковые строковые литералы обычно ссылаются на один объект. Строки, созданные во время выполнения программы, в этот пул автоматически не попадают, но их можно добавить через string.Intern().

StringBuilder помогает избежать лишних аллокаций, а интернирование стоит использовать только там, где действительно много повторяющихся строк.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132👏2
🦴 Хорошая документация сегодня экономит время не только коллегам, но и AI. Почему она стала важнее, чем кажется, — в посте ниже 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
😳 Documentation Driven Development звучит как ещё один модный термин. Пока не попробуешь объяснить свой проект AI.

Агент работает только с тем контекстом, который ему дали. Если документация неполная или устарела, он начинает додумывать — отсюда появляется неверный код.

🔘 На курсе «ИИ для разработчиков» эту тему разбирает Арсений Харланов. Он покажет, как подготовить документацию и контекст, чтобы агент понимал архитектуру проекта, ограничения и связи между компонентами.

Также разберём, как выбирать модель под задачу: Claude, DeepSeek, Qwen и другие ✏️

Впереди 7 недель работы со своим репозиторием. Вебинары проходят вживую и остаются в записи.


Стартуем 31 августа. До конца июля можно присоединиться по ранней цене, а доступ к материалам останется бессрочным 😀

🔗 Посмотреть, что будет на курсе

🏃‍♀️ Proglib Academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
😎 Новый тип Lock в .NET 9. Пора забыть про object?

В .NET 9 появился специальный тип System.Threading.Lock, созданный именно для синхронизации.


private readonly Lock _sync = new();

public void Add(int x)
{
lock (_sync)
{
_items.Add(x);
}
}


Синтаксис lock не изменился, но компилятор распознаёт тип Lock и использует его напрямую, без перехода через Monitor. Это делает код более явным и позволяет снизить накладные расходы.

При необходимости блокировку можно взять и без оператора lock:


using (_sync.EnterScope())
{
_items.Add(x);
}


⚠️ Важно: не приводите Lock к object. В этом случае компилятор предупредит, а оператор lock снова будет работать через старый механизм на базе Monitor.

Для нового кода System.Threading.Lock — рекомендуемый способ реализации взаимного исключения в .NET 9 и новее.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25👏4
Какой из следующих методов используется для реализации наследования в C#?

👾 — class Derived : Base
👍 — class Derived inherits Base
🥰 — class Derived extends Base
⚡️ — Ничего из вышеперечисленного

Библиотека задач по C#
👾108😁173🥰2👍1