C# (C Sharp) programming
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
Больше📈 Аналитический обзор Telegram-канала C# (C Sharp) programming
Канал C# (C Sharp) programming (@csharp_ci) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 18 307 подписчиков, занимая 7 338 место в категории Технологии и приложения и 36 903 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 18 307 подписчиков.
Согласно последним данным от 12 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -16, а за последние 24 часа — 5, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 18.53%. В первые 24 часа после публикации контент обычно набирает 7.49% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 3 393 просмотров. В течение первых суток публикация набирает 1 371 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 0.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как .net, api, логика, архитектура, string.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
Благодаря высокой частоте обновлений (последние данные получены 13 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
IMemoryCache и IDistributedCache.
🔧 Что даёт HybridCache:
• Единый API для in-memory и distributed кэша
• Настраиваемая сериализация
• Stampede protection (анти-нагрузочная защита)
• Удаление по тегам
🧠 Как работает GetOrCreateAsync:
1. Проверяет локальный и распределённый кэш
2. Если нет — вызывает фабричный метод
3. Кэширует результат и возвращает его
🛡️ Stampede protection: только один запрос на ключ запускает фабрику, остальные ждут — никакой гонки или перегрузки БД.
📌 Сниппет на .NET 9 выглядит так:
app.MapGet("/products/{id}", async (
int id,
HybridCache cache,
ProductDbContext db,
CancellationToken ct) =>
{
var product = await cache.GetOrCreateAsync(
$"product-{id}",
async token =>
{
return await db.Products
.Include(p => p.Category)
.FirstOrDefaultAsync(p => p.Id == id, token);
},
cancellationToken: ct
);
return product is null ? Results.NotFound() : Results.Ok(product);
});
HybridCache доступен для ASP.NET Core
Все разработчики могут воспользоваться HybridCache для более эффективного управления кэшем в приложениях на ASP.NET Core.
var result = await AC<LegacyUserDTO, NewUserModel>(legacyUser);
— преобразует старую DTO-модель в новую без ручной работы
var request = new MathRequest { Tokens = new() { "(", "2", "+", "3", ")", "*", "4", "-", "6", "/", "3" } };
var response = await AC<MathRequest, MathResponse>(request);
— рассчитывает результат выражения и генерирует пошаговое решение
⚠️ Проект предназначен только для демонстрации — в продакшн пока не стоит запускать, но как proof-of-concept это отличная иллюстрация, как LLM могут расширять возможности .NET-разработки.
🔗 Репозиторийstruct с интерфейсами. Поведение кажется очевидным — но только на первый взгляд.
📦 Задача
using System;
public interface ICounter
{
void Increment();
int Value { get; }
}
public struct Counter : ICounter
{
private int _value;
public void Increment()
{
_value++;
}
public int Value => _value;
}
class Program
{
static void Main()
{
ICounter counter = new Counter();
counter.Increment();
counter.Increment();
Console.WriteLine(counter.Value);
}
}
❓ Что выведет код?
A) 0
😎 1
C) 2
D) Ошибка компиляции
💡 Разбор
Наивный ответ — 2, ведь Increment() вызывается дважды. Но!
📦 Counter — это struct, то есть value type.
Когда мы присваиваем Counter переменной типа ICounter, происходит boxing — создаётся копия структуры в heap.
🔁 Каждый вызов counter.Increment() работает с новой копией, потому что интерфейс не может напрямую изменить struct без создания временного объекта.
🧱 В итоге Increment() изменяет внутреннее состояние временной копии, но не оригинального значения.
✅ Ответ: 0
🧨 Подвох
Использование struct через интерфейс приводит к boxing.
Вызываемые методы действуют на копии, а не на оригинале.
Изменения теряются, и это не ошибка компиляции — это логическая ловушка.
🔧 Как исправить?
Вариант 1: Сделать Counter классом:
```csharp
public class Counter : ICounter
{
private int _value;
public void Increment() => _value++;
public int Value => _value;
}
public class Counter : ICounter
{
private int _value;
public void Increment() => _value++;
public int Value => _value;
}```
@csharp_ci
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
