Перейти к основному содержимому

Простые приложения на C#

Разработчику Архитектору

Простые приложения на C#​

Язык программирования C# сочетает в себе мощь объектно-ориентированного подхода, строгую типизацию и высокую производительность. Консольные приложения на этом языке служат идеальной основой для понимания фундаментальных концепций — работы с памятью, управления потоками выполнения, обработки исключений и взаимодействия с операционной системой. Ниже представлены примеры реализации типовых утилит, демонстрирующих ключевые возможности платформы .NET.


Как запускать примеры из главы​

  1. dotnet CLI:
dotnet new console -n Demo
Program.cs
dotnet run
  1. Один файл: csc Program.cs && Program.exe (Windows) или mono Program.exe.
  2. Нужно: .NET SDK 8+ (dotnet --version).
dotnet --version

Генератор случайных паролей​

Генерация надежных паролей требует комбинации различных символов из заданных наборов. В C# для этого используют класс Random или более современный System.RandomNumberGenerator. Работа со строками осуществляется через методы преобразования массивов символов в строки.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Код создает массив байтов фиксированного размера. Метод GetBytes заполняет этот массив криптографически стойкими случайными значениями. Цикл перебирает каждый байт, вычисляет остаток от деления на длину набора допустимых символов и выбирает соответствующий символ. Результат собирается в строку и выводится в консоль. Использование RandomNumberGenerator предпочтительнее обычного Random, так как он обеспечивает непредсказуемость значений, необходимую для безопасности.


Сортировщик текстового файла​

Работа с файловой системой включает чтение содержимого, обработку данных в памяти и запись результата обратно. Классы File и StreamReader/StreamWriter предоставляют удобный интерфейс для этих операций. Список строк сортируется методом Sort, который использует алгоритм быстрой сортировки.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Метод ReadAllLines загружает все строки файла в список. Лямбда-выражение внутри метода Sort определяет правило сравнения: строки сравниваются без учета регистра. После сортировки метод WriteAllLines записывает обновленный список в новый файл. Обработка ошибок проверяет существование входного файла перед началом работы.


Консольный калькулятор​

Арифметические операции реализуются через условные конструкции. Парсинг пользовательского ввода требует разделения строки на компоненты. Обработка исключений защищает программу от некорректных данных.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Программа последовательно запрашивает данные у пользователя. Метод TryParse пытается преобразовать введенную строку в число типа double. Если преобразование не удается, программа сообщает об ошибке и завершается. Операция выбирается через конструкцию switch. При делении выполняется проверка делителя на ноль. Результат выводится только если операция выполнена корректно.


Трекер задач в формате JSON​

Сертификация и десериализация объектов позволяют хранить сложные структуры данных в текстовом виде. Библиотека System.Text.Json является стандартным инструментом для работы с JSON в современных версиях .NET.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Класс TaskItem описывает структуру одной записи. Метод LoadTasks читает файл и преобразует JSON-строку в список объектов. Если файл отсутствует, возвращается пустой список. Метод SaveTasks выполняет обратное действие: объект сериализуется в JSON и записывается в файл. Цикл while позволяет пользователю добавлять задачи до тех пор, пока не будет введена команда выхода.


Простой HTTP-сервер и клиент​

Класс HttpListener позволяет создавать сервера, принимающие запросы. Класс HttpClient используется для отправки запросов к этим серверам. Это базовый пример сетевой коммуникации без использования сторонних фреймворков.


Пример кода Сервера​

Код ITЗагрузка примера кода…


Пример кода Клиента​

Код ITЗагрузка примера кода…


Разбор логики​

Сервер создает экземпляр HttpListener, регистрирует адрес и запускает цикл ожидания запросов. Получив контекст, сервер формирует ответ, конвертирует текст в байты и записывает его в поток вывода. Клиент создает HttpClient, отправляет GET-запрос и ожидает ответ. Метод EnsureSuccessStatusCode выбрасывает исключение при ошибках HTTP (например, 404 или 500). Асинхронные методы await предотвращают блокировку потока во время сетевого ожидания.


Утилита для сканирования директорий​

Рекурсивный обход файловых структур реализуется через метод Directory.GetFiles с указанием параметра поиска поддиректорий. Информация о каждом файле доступна через свойства класса FileInfo.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Метод GetFiles принимает корневой путь, маску поиска (*) и опцию AllDirectories, которая включает подпапки в поиск. Цикл проходит по каждому файлу, создает объект FileInfo для получения метаданных (размер, имя) и суммирует общий объем. Проверка индекса массива ограничивает вывод на экран для демонстрации.


Скрипт создания резервной копии​

Копирование файлов требует проверки существования источника и целевой папки. Метод File.Copy позволяет дублировать файлы, а Directory.CreateDirectory создает отсутствующие каталоги.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Программа получает имена исходной и целевой папок. Текущая дата и время используются для формирования уникального имени папки резервной копии. Создается структура папок, повторяющая исходную. Цикл копирует каждый файл, сохраняя относительный путь. Флаг true в методе Copy разрешает перезапись файлов с таким же именем, если они уже существуют.


Мониторинг дискового пространства​

Класс DriveInfo предоставляет информацию о физических и логических дисках системы. Вычисления процентов свободного места выполняются путем деления доступного объема на общий.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Метод GetDrives возвращает массив всех подключенных томов. Цикл фильтрует диски по типу (фиксированные и сетевые), игнорируя приводы CD/DVD. Объемы переводятся из байт в гигабайты. Процент занятого места рассчитывается как разница между общим и свободным объемом, деленная на общий объем. Вывод форматируется с использованием спецификаторов ширины поля.


Парсер URL и проверка доступности ресурса​

Разбор ссылок осуществляется через класс Uri. Проверка доступности требует создания HTTP-запроса и анализа кода состояния ответа.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Массив ссылок содержит тестовые адреса. Цикл создает объект Uri для каждого элемента, извлекая хост, порт и схему. Настройка таймаута предотвращает зависание программы при отсутствии ответа от удаленного сервера. Метод GetAsync отправляет запрос, а свойство IsSuccessStatusCode указывает на успешность операции (код 2xx). Исключения перехватываются для обработки сетевых ошибок.


Конвертер форматов дат​

Класс DateTime поддерживает различные форматы представления времени. Метод ToString преобразует дату в строку по заданному шаблону, а ParseExact выполняет обратное действие, проверяя соответствие строки шаблону.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Входная строка соответствует ISO 8601. Метод ParseExact строго проверяет соответствие шаблона yyyy-MM-ddTHH:mm:ss. Если формат не совпадает, выбрасывается исключение. Результат преобразуется в формат dd.MM.yyyy HH:mm с помощью метода ToString. Свойство Kind показывает локальное или универсальное время.


Утилита для просмотра запущенных процессов​

Класс Process из пространства имен System.Diagnostics позволяет взаимодействовать с процессами операционной системы. Можно получить список всех активных процессов, их идентификаторы и названия.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Метод GetProcesses возвращает массив всех процессов, запущенных текущим пользователем. Цикл проходит по списку, пытаясь прочитать свойства ProcessName, Id и TotalProcessorTime. Обработка исключений необходима, так как процессы могут завершиться в момент чтения или требовать повышенных привилегий. Ограничение количества выводимых строк делает вывод удобным для восприятия в консоли.


Характерный пример для языка C#​

Особенностью C# является использование событий и делегатов для реализации реактивного поведения. Приведенный пример демонстрирует создание простого механизма подписки на события, что характерно для архитектуры приложений на базе .NET.


Как запустить​

  • Проект:
dotnet new console
Program.cs
dotnet run
  • Результат: вывод в консоль (см. Console.WriteLine в примере).

Пример кода​

Код ITЗагрузка примера кода…


Разбор логики​

Делегат MessageHandler определяет сигнатуру метода, который может обрабатывать событие. Событие OnMessageReceived объявляется в классе EventPublisher. Метод Broadcast вызывает обработчики, используя оператор ?.Invoke, что безопасно даже при отсутствии подписчиков. Классы Subscriber реализуют метод обработки. В методе Main происходит регистрация обработчиков через оператор += и удаление через -=. Это паттерн наблюдателя, широко используемый в UI-фреймворках и системах сообщений.


Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.

Содержание