C# (C Sharp) programming
18.7K subscribers
761 photos
38 videos
8 files
676 links
По всем вопросам- @haarrp

C# - обучающий канал Senior C# разработчика.

@ai_machinelearning_big_data - Machine learning

@itchannels_telegram - 🔥лучшие ит-каналы

@csharp_ci - C# академия

@pythonlbooks- книги📚

Реестр РКН: https://clck.ru/3Fk3kb
Download Telegram
🖥 Ссылочные локальные переменные в C#

🟡Начиная с версии C# 7 в языке появилась возможность, позволяющая объявить локальную переменную, ссылающуюся на элемент массива или на поле в объекте:
int[] simpleArray = {0, 1, 2, 3, 4, 5, 6, 7, 8};
ref int simpleElementRef = ref simpleArray[3];

В этом примере simpleElementRef — ссылка на simpleArray[3]. Изменение simpleElementRef приводит к изменению элемента массива:
simpleElementRef *= 15;
Console.WriteLine(simpleElementRef); // 15
Console.WriteLine(simpleArray[3]); // 15


🟡В качестве цели ссылочной локальной переменной может быть указан элемент массива, поле, или обычная локальная переменная. Целью не может быть свойство.
Ссылочные локальные переменные используются для специальных сценариев микро-оптимизации и как правило применяются в сочетании с возвращаемыми ссылочными значениями.

🟡Также ссылочные локальные переменные можно возвращать из методов. В результате получаем возвращаемое ссылочное значение:
static string X = "Старое значение";
static ref string GetX() => ref X; // Возвращает ссылочное значение

static void Main()
{
ref string xRef = ref GetX(); // Присваивает результат ссылочной локальной переменной

xRef = "Новое значение";

Console.WriteLine(X); // Выводит Новое значение
}


📎 Подробнее

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Многопоточное vs асинхронное программирование

▶️Вообще, есть несколько разных понятий:
• Конкурентное исполнение
• Параллельное исполнение
• Многопоточное исполнение
• Асинхронное исполнение
Каждый из этих терминов строго определен и имеет четкое значение.

🟡Конкурентность
Конкурентность — это наиболее общий термин, который говорит, что одновременно выполняется более одной задачи.

🟡Параллельное исполнение
Параллельное исполнение подразумевает наличие более 1 вычислительного устройства (например, процессора), которые будут одновременно выполнять несколько задач.
Параллельное исполнение — это строгое подмножество конкурентного исполнения. Это значит, что на компьютере с 1 процессором параллельное программирование - невозможно

🟡Многопоточность
Многопоточность — это один из способов реализации конкурентного исполнения путем выделения абстракции "рабочего потока" (worker thread).
Потоки "абстрагируют" от пользователя низкоуровневые детали и позволяют выполнять более чем одну работу "параллельно". Операционная система, среда исполнения или библиотека прячет подробности того, будет многопоточное исполнение конкурентным (когда потоков больше чем физических процессоров), или реально параллельным.

🟡Асинхронное исполнение
Асинхронность подразумевает, что операция может быть выполнена кем-то на стороне: удаленным веб-узлом, сервером или другим устройством за пределами текущего вычислительного устройства.


▶️Ну или более неформально: скажем, вам нужно выкопать во дворе бассейн.

• Вы взяли лопату и копаете. Это однопоточная работа

• Вы пригласили друга Васю и копаете вместе, периодически задевая друг-друга лопатами. Это многопоточная работа

• Пока вы копаете бассейн, Вася копает канаву под водопровод. Никто никому не мешает. Это распараллеливание

• Вы пригласили бригаду землекопов, а сами с Васей пошли отдыхать. Когда бригада все сделает, к вам придут за деньгами. Это асинхронная работа.
Количество лопат в хозяйстве - это количество ядер в системе

📎 Подробнее

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Zenject, внедрение зависимостей, Unity C#

Очень понятное объяснение, что же такое Zenject, Dependency Injection и всё такое
Рекомендую)

Что внутри?
• 00:36 - Другие годные источники по зенджекту
• 02:20 - Что такое Dependency Injection?
• 03:39 - Проблема DI — большое количество сервисов
• 04:02 - Проблема DI — вложенные зависимости
• 04:56 - Проблема DI — разное время жизни сервисов
• 05:45 - Что делает Zenject?
• 06:35 - Binding в Zenject
• 07:54 - Installer-s в Zenject
• 09:16 - Context в Zenject
• 10:54 - Как это всё работает
• 11:54 - Дополнительные инструменты Zenject-а
• 13:04 - ITickable, IInitializable и IDisposable

📎 YouTube
🖥 GitHub

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
В какой строке возникнет первое исключение DivideByZeroException?
Anonymous Quiz
37%
#1
22%
#2
29%
#3
11%
Ни в одной
🖥 Факт дня — семафоры в C#

Семафоры позволяют ограничить количество потоков, которые имеют доступ к определенным ресурсам. В .NET семафоры представлены классом Semaphore.

Для создания семафора применяется один из конструкторов класса Semaphore:
🟡Semaphore (int initialCount, int maximumCount)
параметр initialCount задает начальное количество потоков, а maximumCount — максимальное количество потоков, которые имеют доступ к общим ресурсам: initialCount — изначальное доступное количество свободных мест, maximumCount — вместимость.

🟡Semaphore (int initialCount, int maximumCount, string? name) в дополнение задает имя семафора

🟡Semaphore (int initialCount, int maximumCount, string? name, out bool createdNew): последний параметр — createdNew при значении true указывает, что новый семафор был успешно создан. Если этот параметр равен false, то семафор с указанным именем уже существует

Для работы с потоками класс Semaphore имеет 2 основных метода:
WaitOne() ожидает получения свободного места в семафоре
Release() освобождает место в семафоре

В отличие от lock (Monitor) и Mutex, у Semaphore нет «владельца» — он не зависит от потока. Любой поток может вызвать Release на семафоре, тогда как с Mutex и блокировкой только поток, получивший блокировку, может ее освободить.
// запускаем пять потоков
for (int i = 1; i < 6; i++)
{
Reader reader = new Reader(i);
}
class Reader
{
// создаем семафор
static Semaphore sem = new Semaphore(3, 3);
Thread myThread;
int count = 3;// счетчик чтения

public Reader(int i)
{
myThread = new Thread(Read);
myThread.Name = $"Читатель {i}";
myThread.Start();
}

public void Read()
{
while (count > 0)
{
sem.WaitOne(); // ожидаем, когда освободиться место

Console.WriteLine($"{Thread.CurrentThread.Name} входит в библиотеку");

Console.WriteLine($"{Thread.CurrentThread.Name} читает");
Thread.Sleep(1000);

Console.WriteLine($"{Thread.CurrentThread.Name} покидает библиотеку");

sem.Release(); // освобождаем место

count--;
Thread.Sleep(1000);
}
}
}


@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Подборка лучших обучающих каналов для программистов.

➡️ Делитесь с коллегами и сохраняйте себе, чтобы не потерять

Машинное обучение

Machine Learning - запускаем лучшие ИИ модели, пишем код, погружаемся в нейросети
Ml Собеседование - подготовка к собесу по мл, алгоритмам, коду
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат

🏆 Golang
Golang
Golang собеседование - разбор задач и вопросов с собесов
Golang вакансии -работа для Go разработчика
Golang книги библиотека книг
Golang задачи и тесты
Golang чат
Golang news - новости из мира go
Golang дайджест

💥 Linux /Этичный хакинг
Linux Academy - гайды, секреты и лучшие материалы по Linux
Kali linux - погрузись в мир этичного хакинга и кибербезопасности
linux_kal - kali чат
Информационная безопасность

🚀 Data Science

Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data

🛢Базы данных
Sql базы данных - научим работе с базами данных профессионально
Библиотека баз данных
SQL чат
Вакансии Sql аналитик данных

#️⃣C#

С# академия - лучший канал по c#
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа

🐍 Python

Python/django - самый крупный обучающий канал по Python
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги

Java

Java академия - java от Senior разработчика
Java вакансии
Java чат
Java вопросы с собеседований
Java книги

💻 C++

C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии

⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend

🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов

📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки

🇬🇧 Английский для программистов

🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence

🔥 DevOPs
Devops для программистов
Книги Devops

🌟 Docker/Kubernets
Docker
Kubernets

📓 Книги
Библиотеки Книг для программситов

💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend

💥 Бесплатный Chatgpt бот
🖥 Развертывание ASP.NET Core приложений на Ubuntu Linux

Здесь мы рассмотрим последовательность действий для развертывания ASP.NET Core сервиса в Ubuntu Linux. От создания и адаптации приложения, до его развертывания и запуска.
Разберём вопросы регистрации репозиториев Microsoft, установки Apache и .NET, настройки реверс-прокси и некоторой диагностики.

▶️ Начинаем

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 AutoFixture — для быстрого написания модульных тестов

AutoFixture — это библиотека .NET, основная цель которой — позволить разработчикам сосредоточиться на том, что тестируется, а не на том, как настроить сценарий тестирования.

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

🖥 GitHub
🟡 Доки

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Amvera добавила поддержку Go, Ruby и С# (dotnet и mono) окружений

🟡Amvera Cloud — облако для ботов, сайтов и других IT-приложений c функционалом простого деплоя через Git и интерфейс.

🟡C апреля 2024 г. в Amvera Cloud доступна встроенная поддержка для развертывания С# (dotnet и mono) окружений к текущим Python, Java, Node.JS и Docker.
То есть теперь, если ваше приложение на C# (или Golang и Ruby), не нужно писать Dockerfile, можно просто задать конфигурацию в интерфейсе и загрузить файлы проекта через push в Git-репозиторий или интерфейс личного кабинета.
После этого развертывание, установка зависимостей и настройка произойдут автоматически.

📎 Подробнее

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Xeno RAT опубликован на GitHub

Недавно на GitHub был опубликован новый продвинутый инструмент для удалённого доступа (RAT) под названием Xeno RAT. Этот троян, написанный на языке программирования C# и совместимый с операционными системами Windows 10 и Windows 11, предоставляет «обширный набор функций для удалённого управления системой», согласно заявлениям разработчика под псевдонимом moom825.
В функционал Xeno RAT входит обратный прокси-сервер SOCKS5, возможность записи аудио в реальном времени, а также интеграция модуля скрытого виртуального сетевого вычисления (hVNC), подобного DarkVNC, который позволяет злоумышленникам получать удалённый доступ к заражённому компьютеру.

Разработчик отдельно отметил «весёлые» функции своего инструмента, такие как «синий экран смерти» по запросу, отключение монитора удалённого хоста, открытие/закрытие лотка для компакт-дисков и т.п.
Разработчик утверждает, что Xeno RAT был разработан исключительно в образовательных целях.

А что, неплохая идея для пет-проекта на C# ¯\_(ツ)_/¯
🖥 GitHub

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
#ПятничныйКвиз #карательныйсишарп



Объяснение:
Необходимо вспомнить, что метод GetEnumerator для List<T> возвращает структуру. А значит, при каждом обращении к методу x.Items.MoveNext() мы будем работать не с оригинальным перечислителем, а с его копией, не меняя при этом внутреннее состояние исходного енумератора (а именно, его текущий элемент x.Items.Current). Таким образом, в условии цикла ничего полезного не происходит, текущий элемент на веки останется нулём.

@csharp_ci
🖥 В CodeQL 2.17.1 внесли автоисправления на базе AI для C#

CodeQL — это механизм статического анализа, который обеспечивает сканирование кода на GitHub.

На днях была выпущена версия CodeQL 2.17.1; теперь сканирование кода CodeQL поддерживает автоматические предложения исправлений для предупреждений C# о запросах на включение на основе Copilot. Инструмент автоматически включается для всех частных репозиториев всех клиентов GitHub Advanced Security. Впервые автоисправление охватывает почти все запросы безопасности для языка: поддерживается 49 запросов для C# из наших пакетов по умолчанию и расширенных пакетов.

📎 Подробнее

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 LangChain .NET

Имплементация LangChain на C# для создания приложений с LLM

🖥 GitHub
🟡 Wiki

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM