C# (C Sharp) programming
前往频道在 Telegram
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
显示更多📈 Telegram 频道 C# (C Sharp) programming 的分析概览
频道 C# (C Sharp) programming (@csharp_ci) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 18 126 名订阅者,在 技术与应用 类别中位列第 7 044,并在 俄罗斯 地区排名第 36 287 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 18 126 名订阅者。
根据 30 八月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -65,过去 24 小时变化为 0,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 15.36%。内容发布后 24 小时内通常能获得 7.44% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 2 784 次浏览,首日通常累积 1 349 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 0。
- 主题关注点: 内容集中在 .net, api, логика, архитектура, string 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
凭借高频更新(最新数据采集于 31 八月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
18 126
订阅者
无数据24 小时
-117 天
-6530 天
帖子存档
18 126
Вечером 29 мая состоится трансляция питерского .NET-митапа от SpbDotNet и Altenar
Зрители онлайна смогут задавать вопросы спикерам. Регистрируйтесь, чтобы не потерять ссылки на трансляции и получить доступ к записям.
• В 19:00 (мск) Владимир Куропатка расскажет, как добиться высокой производительности и отказоустойчивости при использовании Serilog в проектах.
• В 20:30 Константин Финагин покажет, как писать простые и наглядные юнит-тесты — без тонущих в ассертах простыней кода.
Подробности о докладах и митапе — на странице регистрации. Увидимся в эфире!
18 126
🧠 C# Задача: структура, интерфейс и потеря состояния
Эта задача проверяет знание нюансов работы
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_ci18 126
✍️ RoslynPad — легковесная C#-песочница с интеллектуальным кодом. Этот кроссплатформенный редактор превращает написание C#-кода в интерактивный процесс. В отличие от громоздких IDE, здесь есть только самое нужное: автодополнение на базе Roslyn, подсветка ошибок и быстрый запуск кода.
Проект особенно удобен для экспериментов: можно тестировать фрагменты кода без создания полноценного проекта. Под капотом у инструмента движок компилятора C# и редактор AvalonEdit с поддержкой темной темы.
🤖 GitHub
@csharp_ci
18 126
💡 20 мая в 20:00 пройдет бесплатный вебинар "Реализация инвентаря в Unity" с экспертом, выпустившим 360+ студентов в GameDev. Запись: https://otus.pw/DKth/
💯 Инвентарь — одна из ключевых механик в RPG, survival-играх и даже мобильных проектах. Но 90% разработчиков делают её без возможности масштабирования. Мы это исправим!
Основные темы урока:
📍 Создание на основе реального технического задания.
📍Реализация предмета от простого к сложного.
📍 Реализация инвентаря.
📍 Эффекты предметов.
📈 Вебинар будет полезен:
- Unity-разработчикам уровня Junior/Junior+.
- Middle Unity-разработчикам.
- Программистам на C#, желающим перейти в GameDev.
- Инди-разработчикам.
🎁 Переходите на сайт, чтобы зарегистрироваться на вебинар 20 мая и получить запись предыдущего вебинара: https://otus.pw/DKth/
erid: 2W5zFGDdjV2
18 126
✔️ Режим агента теперь доступен в публичной предварительной версии для всех пользователей в Visual Studio 17.14.
Режим агента в Visual Studio позволяет задавать задачи с помощью естественного языка — Copilot самостоятельно планирует действия, редактирует кодовую базу, вызывает инструменты и итеративно решает проблемы.
В отличие от Copilot Chat или Copilot Edits, агент не останавливается на одной подсказке или правке файла — он действует автономно и выполняет задачу до конца.
https://devblogs.microsoft.com/visualstudio/agent-mode-has-arrived-in-preview-for-visual-studio/
@csharp_ci
18 126
🚀 NBomber — нагрузочное тестирование на .NET без привязки к протоколам. Этот фреймворк позволяет описывать сценарии нагрузочного тестирования на чистом C#/F#, без изучения специализированного DSL.
Ключевая особенность проекта в распределённом режиме для имитации реалистичной нагрузки и интеграция с Grafana/InfluxDB для мониторинга в реальном времени. При этом сценарии можно запускать как консольное приложение или даже как xUnit-тесты в CI/CD.
🤖 GitHub
@csharp_ci
18 126
🛠️ Задача с подвохом: Ленивая инициализация и ловушка многопоточности
Условие:
У вас есть следующий код:
using System;
using System.Threading;
class Program
{
static Lazy<HeavyObject> _heavy = new Lazy<HeavyObject>(() =>
{
Console.WriteLine($"[{Thread.CurrentThread.ManagedThreadId}] Initializing HeavyObject...");
return new HeavyObject();
});
static void Main()
{
for (int i = 0; i < 5; i++)
{
new Thread(() =>
{
Console.WriteLine($"[{Thread.CurrentThread.ManagedThreadId}] Accessing HeavyObject...");
var obj = _heavy.Value;
}).Start();
}
Console.ReadLine();
}
}
class HeavyObject
{
public HeavyObject()
{
Thread.Sleep(1000); // эмуляция долгой инициализации
Console.WriteLine($"[{Thread.CurrentThread.ManagedThreadId}] HeavyObject created.");
}
}
❓ Вопрос:
Сколько раз вы увидите сообщение Initializing HeavyObject... и HeavyObject created.? Почему это может удивить даже опытных .NET разработчиков?
🔍 Разбор:
На первый взгляд вы ожидаете, что:
- `Lazy<T>` гарантирует **ленивую инициализацию один раз** даже при многопоточном доступе.
- Сообщение `Initializing HeavyObject...` и конструктор `HeavyObject` сработают только один раз.
Но! Тут есть подвох.
По умолчанию `Lazy<T>` использует **LazyThreadSafetyMode.ExecutionAndPublication**. Это гарантирует, что даже если несколько потоков обращаются к `.Value` одновременно, объект будет инициализирован **только один раз**.
✅ **Ожидаемый вывод:**
- Каждый поток пишет `Accessing HeavyObject...`
- Только один поток пишет `Initializing HeavyObject...` и `HeavyObject created.`
- Остальные потоки дождутся завершения и получат уже готовый объект.
Примерный вывод:
```
[4] Accessing HeavyObject...
[5] Accessing HeavyObject...
[6] Accessing HeavyObject...
[7] Accessing HeavyObject...
[8] Accessing HeavyObject...
[4] Initializing HeavyObject...
[4] HeavyObject created.
```
🌀 **Подвох, если сменить режим:**
Если вы немного измените код вот так:
```csharp
static Lazy<HeavyObject> _heavy = new Lazy<HeavyObject>(
() =>
{
Console.WriteLine($"[{Thread.CurrentThread.ManagedThreadId}] Initializing HeavyObject...");
return new HeavyObject();
},
LazyThreadSafetyMode.None // без потокобезопасности
);
```
То при **одновременном** доступе к `.Value` вы получите **несколько инициализаций** (по сути гонку потоков).
Примерный вывод может быть таким:
```
[4] Accessing HeavyObject...
[5] Accessing HeavyObject...
[6] Accessing HeavyObject...
[4] Initializing HeavyObject...
[5] Initializing HeavyObject...
[6] Initializing HeavyObject...
[4] HeavyObject created.
[5] HeavyObject created.
[6] HeavyObject created.
```
Итого объект будет создан несколько раз, что ломает инварианты "Lazy должен создавать объект один раз".
✅ **Вывод:**
• По умолчанию `Lazy<T>` **потокобезопасен**, но важно понимать, что это можно **изменить**.
• При работе с многопоточностью в .NET всегда обращайте внимание на **режим LazyThreadSafetyMode**.
• Даже опытные разработчики могут не заметить подвоха, если кто-то по ошибке или из оптимизаций использует `LazyThreadSafetyMode.None`.
💡 **Бонус-вопрос:**
Что произойдёт, если ваш factory-метод (лямбда) выбросит исключение при инициализации? Как `Lazy<T>` поведёт себя при следующем доступе к .Value?
@csharp_ci18 126
🎨 Fluent.Ribbon — WPF-библиотека для тех, кто скучает по интерфейсам в стиле Microsoft Office. Этот инструмент превратит стандартные окна в полноценную ленточную панель с вкладками, Backstage-меню и Quick Access Toolbar.
Библиотека не просто копирует визуал, а адаптирует его под WPF, сохраняя гибкость: от кастомизации галерей до тонкой настройки всплывающих подсказок. Интересно, что проект живёт уже больше десяти лет и продолжает обновляться — последние версии поддерживают .NET 8 и современные IDE.
🤖 GitHub
@csharp_ci
18 126
💡 13 мая в 20:00 пройдет бесплатный вебинар "Профессиональная архитектура ИИ в Unity". Научим писать гибкий, чистый и мощный ИИ-код, который легко поддерживать и расширять. Запись: https://otus.pw/s6U0p/
😔 Многие Unity-разработчики пишут ИИ через MonoBehaviour и простые скрипты, но в реальных проектах такой подход приводит к хаосу, багам и невозможности масштабирования.
🔊 На интенсиве 13 мая в 20:00 разберём архитектурные паттерны и подходы, которые используют в AAA-студиях и коммерческой разработке.
📖 Основные темы:
- архитектура ИИ
- паттерны (HSM, Behaviour Tree, GOAP)
- поиск пути
Вебинар будет полезен:
- Unity-разработчикам уровня Junior/Junior+
- Middle Unity-разработчика
- Программистам на C#, желающим перейти в GameDev
- Инди-разработчикам
📩 Переходите на сайт, чтобы зарегистрироваться на вебинар 13 мая и получить запись предыдущего вебинара: https://otus.pw/s6U0p/
erid: 2W5zFJoYtit
18 126
🚀 Downloader — мощный .NET-инструмент для загрузки файлов с поддержкой многопоточности. Эта библиотека не просто качает файлы, а делает это асинхронно, с возможностью разбивки на части и автоматическим ресайзом при обрывах.
Что особенно удобно — Downloader работает на всех основных ОС и поддерживает .NET 8+, а также умеет показывать прогресс в реальном времени, загружать файлы прямо в память, ограничивать скорость, чтобы не перегружать канал.
🤖 GitHub
@csharp_ci
18 126
МТС приглашает разработчиков на масштабную ИТ-конференцию True Tech Day 6 июня. Участие бесплатно
Ключевая тема конференции в этом году — искусственный интеллект. Тебя ждут доклады ученых, выступления зарубежных спикеров по AI и экспертов крупных ИТ-компаний.
В программе:
— 4 трека и больше 40 докладов.
— Выступления зарубежных спикеров с индексом Хирша более 50.
— Концентрация практических кейсов: как создаются большие ML-проекты.
— Доклады по архитектуре, бэкенд-разработке и построению ИТ-платформ.
— AI-интерактивы и технологические квесты.
— Пространство для нетворкинга,
…а еще after-party со звездным лайн-апом.
Когда: 6 июня
Где: Москва, МТС Live Холл и онлайн
Участие бесплатно. Регистрация по ссылке.
18 126
🔮 IKVM — мост между Java и .NET. Инструмент превращает скомпилированные JAR-файлы в .NET-сборки, а также помогает стандартным Java-библиотекам работать как родные для C#.
Особенность проекта кроется в динамической трансляции байт-кода в CIL на лету или статической компиляции в DLL. Это открывает интересные сценарии, например, использование Java-библиотек машинного обучения в .NET-приложениях или интеграция legacy-кода без полного рефакторинга.
🤖 GitHub
@csharp_ci
18 126
💥 .NET MAUI библиотеки теперь автоматически публикуются через GitHub Actions
Microsoft внедрила автоматическую публикацию и обновление NuGet-пакетов для .NET MAUI библиотек с помощью GitHub Actions. Это сделает экосистему библиотек MAUI более стабильной, прозрачной и предсказуемой.
✨ Что изменилось:
- Автоматизирован процесс сборки и публикации через CI/CD pipeline
- Обновления появляются на NuGet быстрее, без ручных шагов
- Все исходники библиотек MAUI открыты на GitHub, с привязкой к actions-логам
Упрощено тестирование новых версий через pre-release пакеты
📚 Для разработчиков это значит:
- легче отслеживать новые версии и багфиксы
- быстрее интегрировать свежие фичи MAUI в свои проекты
- можно сразу видеть изменения в GitHub Actions workflow
GitHub Actions теперь ключевая часть поставки .NET MAUI — публикация пакетов стала автоматизированной, прозрачной и быстрее для всех пользователей.
✅ Подробности: https://devblogs.microsoft.com/dotnet/dotnet-maui-libraries-github-actions/
✅Примеры: https://github.com/dotnet/maui-samples
@csharp_ci
18 126
🖥 Задача: Что выведет этот код на C\#?
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("1");
var task = FooAsync();
Console.WriteLine("2");
await task;
Console.WriteLine("5");
}
static async Task FooAsync()
{
Console.WriteLine("3");
await Task.Delay(100);
Console.WriteLine("4");
}
}
❓ Вопрос:
Какой порядок чисел появится в консоли?
👇 Подумай, прежде чем смотреть ответ.
—
✅ Разбор:
1. Console.WriteLine("1"); → печатает 1
2. var task = FooAsync(); → вызывается FooAsync(), который:
печатает 3
доходит до await Task.Delay(100); и возвращает управление в Main (не дожидаясь задержки)
3. Console.WriteLine("2"); → печатает 2
4. await task; → теперь Main ждёт завершения FooAsync
5. после 100ms продолжает выполнение в FooAsync → печатает 4
6. возвращаемся в Main → печатает 5
—
🎉 Окончательный вывод:
1
3
2
4
5
📝 Что проверяет задача:
- Понимание работы async/await
- Как работают точки приостановки (suspension points)
- Когда код возвращается в вызывающий метод
#CSharp #AsyncAwait #InterviewQuestion #CodeChallenge
@csharp_ci18 126
Интересный канал про c#
Канал собеседования C# - https://t.me/become_an_IT_dot_net
Автор пишет про то, какие вопросы могут быть на собеседовании по c#. Есть технический контент, есть рассказы про собеседования. Канал пока молодой и активно развивается.
18 126
🖥 PowerShell-скрипт для переименования .NET-проекта
Переименование .NET-проекта — занятие утомительное:
нужно переименовать папки, файлы, неэмспейсы, а также заменить строки внутри .sln и .csproj файлов.
Перед вами PowerShell-скрипт, который автоматизируетпеерименование: он рекурсивно переименовывает папки и файлы и заменяет содержимое внутри:
$ErrorActionPreference = "Stop"
$rootFolder = Resolve-Path -Path "."
$oldName = "Sample.Foo"
$newName = "Sample.Bar"
# Rename files and folders
foreach ($item in Get-ChildItem -LiteralPath $rootFolder -Recurse | Sort-Object -Property FullName -Descending) {
$itemNewName = $item.Name.Replace($oldName, $newName)
if ($item.Name -ne $itemNewName) {
Rename-Item -LiteralPath $item.FullName -NewName $itemNewName
}
}
# Replace content in files
foreach ($item in Get-ChildItem -LiteralPath $rootFolder -Recurse -Include "*.cmd", "*.cs", "*.csproj", "*.json", "*.md", "*.proj", "*.props", "*.ps1", "*.sln", "*.slnx", "*.targets", "*.txt", "*.vb", "*.vbproj", "*.xaml", "*.xml", "*.xproj", "*.yml", "*.yaml") {
$content = Get-Content -LiteralPath $item.FullName
if ($content) {
$newContent = $content.Replace($oldName, $newName)
Set-Content -LiteralPath $item.FullName -Value $newContent
}
}
@csharp_ci18 126
👾 BotSharp — фреймворк для AI-ассистентов на .NET. Этот open-source фреймворк объединяет чат-ботов, RAG-системы и мультиагентные сценарии в единую платформу с модульной архитектурой.
Особенность инструмента в его ориентации на корпоративные задачи: от интеграции с мессенджерами до работы с базами данных. Проект поддерживалось ChatGPT, Gemini, Claude и других LLM через единый интерфейс, встроенный UI на SvelteKit и инструменты для оценки работы моделей.
🤖 GitHub
@csharp_ci
18 126
+5
🖥 Linux — топ среди обучающих каналов для быстрого погружения Linux.
Наглядные картинки и короткие видео - мы расскажем о всех секртетах Linux администрирования.
Подписаться: t.me/linuxacademiya
18 126
🚀 SuperSocket —высокопроизводительный фреймворк для сетевых приложений на .NET. В отличие от стандартных решений, он предлагает готовую инфраструктуру для работы с TCP, UDP и WebSocket, скрывая сложности низкоуровневых операций за простым API.
Проект имеет модульную архитектуру с поддержкой middleware и встроенной системой команд, что позволяет легко адаптировать его для разных сценариев. Интеграция с DI-контейнером .NET и кроссплатформенность делают данный инструмент универсальным выбором для современных приложений.
🤖 GitHub
@csharp_ci
18 126
🚀 Silk.NET 3.0: грядущая революция в .NET-графике
Сообщество Silk.NET анонсировало работу над третьей версией своего фреймворка — амбициозным переосмыслением того, как должны работать низкоуровневые .NET-биндинги для графики и мультимедиа.
Особенность проекта всегда заключалась в кроссплатформенности и минимальных накладных расходах при работе с GPU. В 3.0 разработчики обещают переработанную систему биндингов и улучшенную интеграцию с современными .NET-стэками.
🤖 GitHub
@csharp_ci
