ar
Feedback
C# 1001 notes

C# 1001 notes

الذهاب إلى القناة على Telegram

Регулярные короткие заметки по C# и .NET. Просто о сложном для каждого. admin - @haarrp

إظهار المزيد
6 539
المشتركون
-324 ساعات
-17 أيام
-230 أيام
أرشيف المشاركات
🤖 Open Claude Cowork: AI-партнёр для программирования Open Claude Cowork — это настольный AI-ассистент, который помогает в п
🤖 Open Claude Cowork: AI-партнёр для программирования Open Claude Cowork — это настольный AI-ассистент, который помогает в программировании, управлении файлами и выполнении задач. Он совместим с Claude Code и предлагает визуальный интерфейс для удобной работы с AI, позволяя легко управлять сессиями и получать результаты в реальном времени. 🚀Основные моменты: - 🖥️ Настольное приложение с визуальным интерфейсом - 🤖 AI-партнёр для выполнения задач - 🔁 Полная совместимость с Claude Code - 📂 Удобное управление сессиями и историей - 🔐 Контроль разрешений для безопасных действий 📌 GitHub: https://github.com/DevAgentForge/Claude-Cowork

⚡️ Автоматическая регистрация Minimal APIs в .NET - без ручного маппинга Если в проекте 20+ endpoint’ов, app.MapGet/MapPost п
⚡️ Автоматическая регистрация Minimal APIs в .NET - без ручного маппинга Если в проекте 20+ endpoint’ов, app.MapGet/MapPost превращается в ад. Решение - авторегистрировать endpoints через DI. Идея: 1) Делаешь общий интерфейс IEndpoint 2) Каждый endpoint реализует его 3) На старте приложения сканируешь сборку, регистрируешь все реализации в DI 4) Достаёшь их из DI и вызываешь MapEndpoints() Плюсы: ✅ чистый Program.cs ✅ каждый endpoint в отдельном файле ✅ масштабируется без хаоса ✅ легко тестировать и поддерживать Пример паттерна:

builder.Services.AddEndpoints(typeof(Program).Assembly);

public interface IEndpoint
{
    void Map(IEndpointRouteBuilder app);
}

public static class EndpointExtensions
{
    public static IServiceCollection AddEndpoints(this IServiceCollection services, Assembly assembly)
    {
        var endpoints = assembly.DefinedTypes
            .Where(t => !t.IsAbstract && !t.IsInterface && typeof(IEndpoint).IsAssignableFrom(t))
            .Select(t => ServiceDescriptor.Transient(typeof(IEndpoint), t))
            .ToArray();

        services.TryAddEnumerable(endpoints);
        return services;
    }

    public static void MapEndpoints(this WebApplication app)
    {
        foreach (var endpoint in app.Services.GetServices<IEndpoint>())
            endpoint.Map(app);
    }
}

✔️ C# стал языком 2025 года по версии TIOBE. Индекс TIOBE подвел итоги года: звание «Язык 2025 года» досталось C#, который по
✔️ C# стал языком 2025 года по версии TIOBE. Индекс TIOBE подвел итоги года: звание «Язык 2025 года» досталось C#, который показал рекордный рост популярности (+2.94%)? однако в общем зачете он по-прежнему занимает 5-ю строчку. Абсолютным лидером остается Python с 22.61% долей рынка. В первой пятерке произошли перестановки: язык C поднялся на 2 место, сместив C++ на 4-ю позицию; 3 место досталось Java, а R вернулся в топ-10. Провал года - Go, который неожиданно сдал позиции, опустившись сразу на 16-е место. Индекс оценивает популярность технологий на основе поисковых запросов, активности комьюнити и количества обучающих материалов. https://www.tiobe.com/tiobe-index/

🔥 На stepik вышел курс, который учит Создавать настоящие AI-сервисы, а не просто запускать скрипты? Этот практический курс п
🔥 На stepik вышел курс, который учит Создавать настоящие AI-сервисы, а не просто запускать скрипты? Этот практический курс по Python и FastAPI покажет, как собрать полноценное приложение с ИИ, базой данных, автогенерацией контента и Telegram-ботом. Ты пройдёшь путь от первого HTTP-запроса до рабочего сервиса, который сам генерирует текст через ИИ, сохраняет данные, отправляет результаты по расписанию и отвечает пользователям. Никакой теории ради теории - только практические шаги, из которых рождается реальный продукт. 🎁 48 часов действует скидка в 40% процентов 👉 Начать учиться на Stepik

3 простые оптимизации, которые реально ускоряют код 1️⃣ Забирай данные пачкой Меньше запросов — меньше сетевых задержек. Вмес
3 простые оптимизации, которые реально ускоряют код 1️⃣ Забирай данные пачкой Меньше запросов — меньше сетевых задержек. Вместо десятков запросов — один IN (...). 2️⃣ Делай больше параллельно Если задачи не зависят друг от друга — выполняй их одновременно. Асинхронность часто даёт бесплатный прирост скорости. 3️⃣ Кэшируй результаты Если данные не меняются — не пересчитывай и не запрашивай их заново. Память дешевле времени. Никакой магии и сложных алгоритмов — просто базовые приёмы, которые в реальных проектах дают самый заметный эффект.

🔥 Последний шанс: набор на курс Highload Architect в этом году завершается! 🚀 Если хотите перейти от разработки к архитекту
🔥 Последний шанс: набор на курс Highload Architect в этом году завершается! 🚀 Если хотите перейти от разработки к архитектуре высоконагруженных систем — действуйте сейчас. Чтобы попасть в поток и зафиксировать спеццену, нужно успеть пройти вступительное тестирование до закрытия набора. Вы сможете прокачать: • Проектирование масштабируемых систем под миллионы запросов • Оптимизацию производительности и отказоустойчивые архитектуры • Практику с современными инструментами highload-разработки • Применение проверенных паттернов и подходов в продакшене 🗓 Старт уже совсем скоро, места ограничены. Формат — онлайн, реальные кейсы, проект с защитой и детальный фидбек от практиков. 👉 Пройдите вступительное тестирование прямо сейчас: https://otus.pw/m5B0/?erid=2W5zFHPuxbJ Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🔥 Как правильно работать с конфигурацией в .NET Самый чистый и масштабируемый способ получать настройки в .NET - это Options
🔥 Как правильно работать с конфигурацией в .NET Самый чистый и масштабируемый способ получать настройки в .NET - это Options pattern. Где живет конфигурация Настройки приложения могут приходить из разных источников: - переменные окружения - JSON-файлы appsettings - user secrets - другие configuration providers Да, можно читать значения напрямую через IConfiguration. Но это плохо масштабируется: - легко ошибиться в ключе - нет типизации - нет валидации - код быстро превращается в хаос Поэтому IConfiguration напрямую лучше не использовать в бизнес-коде. Options pattern - как правильно Вместо этого используется Options pattern: 1. Создаешь класс настроек - один класс = одна логическая группа конфигурации 2. Биндишь его к appsettings.json - через services.Configure<T> 3. Используешь настройки через DI - IOptions - IOptionsSnapshot - IOptionsMonitor Плюсы подхода - строгая типизация - автокомплит в IDE - централизованная конфигурация - проще рефакторить - можно добавить валидацию через data annotations Например: - [Required] - [Range] - [EmailAddress] Это позволяет ловить ошибки конфигурации при старте приложения, а не в продакшене. Важно знать Существуют разные интерфейсы: - IOptions - статические настройки на все время жизни приложения - IOptionsSnapshot - обновляются на каждый запрос (scoped) - IOptionsMonitor - отслеживают изменения конфигурации в рантайме Понимание разницы между ними сильно влияет на корректность архитектуры. Если пишешь production .NET - Options pattern должен быть стандартом по умолчанию. https://www.milanjovanovic.tech/blog/how-to-use-the-options-pattern-in-asp-net-core-7

🛠 Как оживить протухшую ветку без merge-хаоса Бывает: вы увлеклись разработкой, прошло пару недель (или месяцев), а основная ветка уже ушла далеко вперёд. В итоге — боль, конфликты и бесконечные merge-коммиты. В таких случаях может спасати ребейз на свежую ветку:

git pull --rebase origin release/1.2.0
Она подтянет последние изменения из релизной ветки и наложит ваши коммиты поверх, сохранив линейную историю. Конфликты всё равно придётся разруливать, но по одному — в контексте конкретного коммита, а не в гигантской свалке. После успешного ребейза пушим с --force-with-lease, чтобы аккуратно обновить удалённую ветку, и продолжаем работать так, как будто отставания и не было.

🧠 Polyglot Persistence: как современные системы живут с десятками баз данных 🔥 23 декабря в 20:00 мск — открытый вебинар в
🧠 Polyglot Persistence: как современные системы живут с десятками баз данных 🔥 23 декабря в 20:00 мск — открытый вебинар в OTUS. Одна база данных больше не справляется с требованиями современного мира. Сегодня компании вроде Avito, Yandex, Ozon и Spotify объединяют PostgreSQL, ClickHouse, Redis, Kafka, Elasticsearch и десятки других инструментов в единую экосистему, где каждая БД отвечает за свой кусочек производительности. 📌 На вебинаре разберём: — Принципы Polyglot Persistence и как распределять роли между СУБД — Как связать PostgreSQL, ClickHouse, Redis и Kafka без потери согласованности — Как работают event-driven архитектуры, CDC и outbox-паттерн в боевых системах — Как проектировать отказоустойчивые data-платформы Регистрация https://otus.pw/enVW/?erid=2W5zFHSfqbE Бесплатное занятие приурочено к старту курса Highload Architect, где вы научитесь проектировать системы, выдерживающие миллионы запросов. Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🚦 Feature Flags в .NET - как управлять релизами без redeploy Feature flags (фиче-флаги) позволяют включать и выключать функц
🚦 Feature Flags в .NET - как управлять релизами без redeploy Feature flags (фиче-флаги) позволяют включать и выключать функциональность на лету, без повторного деплоя и риска для продакшена. Идея простая: код задеплоен → поведение управляется конфигурацией. Что это даёт на практике: — Постепенные релизы Можно включить новую фичу сначала для 1%, 10% или конкретной группы пользователей. — Быстрый rollback Если что-то пошло не так — просто выключаете флаг. Без откатов и срочных хотфиксов. — A/B тесты Разные пользователи получают разное поведение одного и того же кода. — Targeting пользователей Фичи можно включать: • по user id • по роли • по региону • по environment (dev / staging / prod) — Меньше фиче-веток Код живёт в main, а не за флагами в git. В .NET обычно используют: - Microsoft.FeatureManagement - Azure App Configuration - LaunchDarkly / Unleash / ConfigCat Где это особенно полезно: - публичные API - high-traffic сервисы - SaaS-продукты - экспериментальные и рискованные фичи Коротко: Feature flags превращают релиз из «одного опасного момента» в управляемый процесс. Это один из самых мощных инструментов для зрелой backend-архитектуры. 👉 Подробнее

Крутая статья - «Building an Event Queue in ASP.NET Core» от Deepumi. 🔹 Она показывает, как правильно построить очередь собы
Крутая статья - «Building an Event Queue in ASP.NET Core» от Deepumi. 🔹 Она показывает, как правильно построить очередь событий внутри ASP.NET Core-приложения: • использовать встроенные механизмы (middleware / DI) • распределять события между обработчиками • обрабатывать события асинхронно и надёжно 🔹 Такая архитектура помогает: • реализовать decoupled компоненты, которые не знают друг о друге • централизовать событие-поток (логика, оповещения, триггеры и т.п.) • легче масштабировать и тестировать код Если работаешь с ASP.NET Core и хочешь сделать систему событий - стоит заглянуть. Подробнее: deepumi.com/blog/building-an-event-queue-in-aspnet-core.html

💻 Асинхронная обработка данных в высоконагруженных системах 🚀 🔥 16 декабря в 20:00 мск — открытый урок в OTUS. 📌 На вебин
💻 Асинхронная обработка данных в высоконагруженных системах 🚀 🔥 16 декабря в 20:00 мск — открытый урок в OTUS. 📌 На вебинаре вы узнаете: — Как использовать асинхронную обработку данных для масштабирования сервисов — Как работают очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия — Как выглядит архитектура реального проекта: от веб-сервера до брокера сообщений и базы данных — Какие узкие места чаще всего встречаются в асинхронных системах и как их устранять 🎓 После занятия вы: — Разберётесь в принципах асинхронной архитектуры и её влиянии на производительность — Научитесь применять асинхронные подходы — Получите реальные примеры архитектурных решений 👉 Регистрация https://otus.pw/Ayxv/?erid=2W5zFJbb2u6 Бесплатный урок приурочен к старту курса Highload Architect, на котором вы освоите архитектуры, выдерживающие миллионы запросов в секунду, и научитесь проектировать системы без узких мест. 🚀 Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🚀 .NET 10 - реально мощный релиз. Вот что важно знать 👇 .NET 10 и C# 14 вышли 11 ноября 2025 года. Это LTS-версия - поддерж
+7
🚀 .NET 10 - реально мощный релиз. Вот что важно знать 👇 .NET 10 и C# 14 вышли 11 ноября 2025 года. Это LTS-версия - поддержку будут выпускать до ноября 2028 года, поэтому её можно спокойно брать для продакшна. 🔥 Главное ✔ C# 14 Новый синтаксис и возможности языка: • Extension Members — расширения прямо в типах • Null-Conditional Assignment - безопасные присваивания • field keyword — точный контроль над авто-свойствами • Модификаторы у параметров лямбд • Частичные конструкторы и события ✔ File-Based Apps Теперь можно просто создать один .cs файл и запускать приложение - без .sln, без .csproj. Быстро, просто, удобно. ASP.NET Core • Валидация в Minimal APIs • JSON Patch • SSE (Server-Sent Events) • Поддержка OpenAPI 3.1 ✔ EF Core • Complex Types можно делать optional • JSON и struct внутри Complex Types • LeftJoin / RightJoin • Named Query Filters • ExecuteUpdate работает с JSON-колонками • В ExecuteUpdate теперь можно использовать обычные лямбды Полный гайд здесь: ↳ https://antondevtips.com/blog/new-features-in-dotnet-10-and-csharp-14/?utm_source=twitter&utm_medium=social&utm_campaign=04-12-2025

✔️ Delegating Handlers в .NET: как правильно добавлять сквозную логику для HttpClient DelegatingHandler - это удобный способ
✔️ Delegating Handlers в .NET: как правильно добавлять сквозную логику для HttpClient DelegatingHandler - это удобный способ внедрять сквозную логику в каждый HTTP-запрос: авторизацию, логирование, метрики, ретраи и любые другие политики, не трогая основной код. Пример обработчика аутентификации: - добавляет заголовок Authorization - подставляет корректный User-Agent - затем передаёт управление следующему звену конвейера Это позволяет централизованно контролировать конфигурацию запросов и избегать дублирования логики во всех сервисах. Подходит для чистой архитектуры, микросервисов и SDK, где важна единообразная обработка запросов.

⚡️ Полезное о блокировках в C#. Многие собеседования заваливаются именно здесь. Коротко по сути: lock не работает в `async`-м
⚡️ Полезное о блокировках в C#. Многие собеседования заваливаются именно здесь. Коротко по сути: lock не работает в `async`-методах. Причина проста — выполнение может продолжиться на другом потоке, и гарантии взаимного исключения теряются. Что использовать вместо `lock` в асинхронном коде: - SemaphoreSlim — основной вариант - Semaphore - Mutex - Monitor (в синхронных сценариях) Правильный шаблон: 1. Всегда используйте таймаут, чтобы избежать зависаний. 2. Освобождайте ресурс в `finally`, иначе возможна утечка блокировки. Примерный подход: - попытаться войти с ограничением времени - выполнить критическую секцию - гарантированно освободить семафор Почему это важно: В многопоточном и распределённом окружении неправильная синхронизация приводит к гонкам, дублированию запросов, «штормам» в кеше и нагрузке на внешний API. Вопрос для практики: Как реализовать блокировку на уровне базы данных, чтобы синхронизировать несколько инстансов приложения? Ответ — в разборе по distributed locking: milanjovanovic.tech/blog/distributed-locking-in-dotnet-coordinating-work-across-multiple-instances

🖥 Directory.Build.props - простой способ задать единые настройки для всей .NET-солюции. Вместо того чтобы дублировать конфиг
🖥 Directory.Build.props - простой способ задать единые настройки для всей .NET-солюции. Вместо того чтобы дублировать конфигурацию в каждом .csproj, ты создаёшь один файл в корне и управляешь всем централизованно: версия языка, уровни предупреждений, Nullable, ImplicitUsings, Deterministic-сборки и даже версии NuGet-пакетов. Подходит, если хочешь порядок в проектах и одинаковые правила для всей команды.

Коллекции .NET: взгляд изнутри Как устроены стандартные коллекции в .NET и почему понимание их внутренней логики помогает пис
Коллекции .NET: взгляд изнутри Как устроены стандартные коллекции в .NET и почему понимание их внутренней логики помогает писать более производительный код? На открытом вебинаре курса OTUS «C# Developer. Advanced» Антон Герасименко покажет, что происходит «под капотом» List, Dictionary и других структур данных. 📆 4 декабря, 20:00 Коллекции .NET: взгляд изнутри: — разберём устройство стандартных коллекций — заглянем в исходный код и объясним, почему они работают именно так — обсудим, когда стоит реализовать собственную структуру данных Вебинар будет полезен разработчикам уровня Junior и выше, которые хотят глубже понимать, как устроены базовые механизмы .NET и как использовать их эффективнее. 👉Зарегистрируйтесь: https://otus.pw/esShq/?erid=2W5zFGumrxg Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

«Обзор нововведений в C# 14» Статья от PVS-Studio на Хабре описывает, что именно добавили в C# 14 и как эти изменения делают код чище и короче. 1. Ключевое слово field Теперь в сеттере свойства можно обращаться к скрытому полю без его явного объявления. Это уменьшает шаблонный код и делает свойства компактнее. Пример было:

private string _email;
public string Email
{
  get => _email;
  set => _email = value.Trim();
}
Пример стало:


public string Email
{
  get;
  set => field = value.Trim();
}
Лямбды с модификаторами без указания типа Если в параметрах используются ref, out, in, теперь можно не писать тип. Это улучшает читаемость и уменьшает шум. Было:


(value, out string error) => ...
Стало:

(value, out error) => ...
Перегрузка операторов составного присваивания (+=, -=, *=, /=) Теперь такие операторы можно перегружать напрямую, а не через комбинацию бинарного оператора и присваивания. Это делает пользовательские типы более естественными и управляемыми. nameof для открытых обобщённых типов Теперь можно писать:


nameof(List<>)
Это полезно при генерации кода, рефлексии и работе с API, где нужны именно открытые generics. C# 14 - небольшое, но важное обновление языка, направленное на упрощение синтаксиса и уменьшение шаблонного кода. Наиболее заметные улучшения - field и новые правила для лямбд.

🧩 Борьба с блокировками в PostgreSQL: как достичь высокой параллельности при большой нагрузке 🚀 🔥 2 декабря в 20:00 мск —
🧩 Борьба с блокировками в PostgreSQL: как достичь высокой параллельности при большой нагрузке 🚀 🔥 2 декабря в 20:00 мск — открытый урок в OTUS. 📌 На вебинаре рассмотрим: — Почему возникают блокировки и как они влияют на скорость работы базы данных— Типы блокировок в PostgreSQL и их особенности на уровне транзакций и строк — Как находить узкие места, анализировать ожидания и устранять deadlock-и — Методы оптимизации запросов и транзакций для повышения параллельности — Архитектурные приёмы и практики проектирования систем с высокой конкурентностью 🎓 После урока вы: — Поймёте, как устроен механизм блокировок и научитесь управлять ими осознанно — Научитесь диагностировать и устранять конфликты между транзакциями — Получите набор практических решений по оптимизации PostgreSQL под нагрузкой — Сможете спроектировать архитектуру, обеспечивающую высокую стабильность и масштабируемость 👉 Регистрация https://otus.pw/k3A0/?erid=2W5zFHrYhVa Бесплатное занятие приурочено к старту курса Highload Architect, на котором вы освоите подходы к построению производительных архитектур, готовых к тысячам запросов в секунду. Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

⚡️ Полное руководство по Bash: от основ к продвинутым темам Bash (Bourne Again SHell) — это одна из самых популярных Unix-обо
⚡️ Полное руководство по Bash: от основ к продвинутым темам Bash (Bourne Again SHell) — это одна из самых популярных Unix-оболочек, широко используемая для запуска команд и написания скриптов в Linux и macOS. Скрипты Bash позволяют автоматизировать рутинные задачи, объединять команды в программы и управлять системой через командную строку. Данное руководство последовательно познакомит вас с основами Bash (синтаксис, переменные, условия, циклы и т.д.), а затем перейдет к продвинутым возможностям (таким как настройка strict mode, использование trap-обработчиков, планирование задач через cron и др.). Мы рассмотрим практические примеры скриптов, сопровождая их поясняющими комментариями, чтобы у вас сложилось цельное понимание создания надежных Bash-скриптов. https://uproger.com/polnoe-rukovodstvo-po-bash-ot-osnov-k-prodvinutym-temam/ Видео: https://www.youtube.com/watch?v=ei0a1TT4ukU