Generated by All in One SEO v5.0.0.1, this is an llms.txt file, used by LLMs to index the site. # Платформа .NET и C# от А до Я Учимся программировать на языке C# (Си Шарп) ## Sitemaps - [XML Sitemap](https://csharp.webdelphi.ru/sitemap.xml): Contains all public & indexable URLs for this website. ## Записи - [Open XML SDK в C#. Класс Paragraph - работа с абзацами](https://csharp.webdelphi.ru/open-xml-sdk-klass-paragraph-rabota-s-abzacami/) - В этой части мы познакомились в общих чертах с тем, как в Open XML ведется работа с абзацами - рассмотрели свойства класса Paragraph и написали небольшой пример использования настроек абзаца при работе с Open XML в C#. - [Open XML SDK в C#. Работа с таблицами](https://csharp.webdelphi.ru/open-xml-sdk-v-c-rabota-s-tablicami/) - Работа с таблицами в Open XML C#: создание таблицы, добавление строк и ячеек таблицы, объединение ячеек таблиц. - [Open XML SDK в C#. Введение: DocumentFormat.OpenXml](https://csharp.webdelphi.ru/open-xml-sdk-vvedenie-documentformat-openxml/) - Для работы с форматом Open XML в .NET/C# мы можем использовать различные пакеты, основной из которых - это DocumentFormat.OpenXml. Для работы с DocumentFormat.OpenXml мы должны знать структуру документа, чтобы правильно его создавать. - [Open XML SDK в C#. Класс WordprocessingDocument - создание нового и открытие существующего файла Word](https://csharp.webdelphi.ru/open-xml-sdk-klass-wordprocessingdocument-sozdanie-novogo-i-otkrytie-sushhestvuyushhego-fajla-word/) - Open XML SDK: структура документа Word, методы создания объекта класса WordprocessingDocument, создание документа на основе шаблона - [Open XML SDK в C#. Класс Run - работа с участками текста](https://csharp.webdelphi.ru/open-xml-sdk-klass-run-rabota-s-uchastkami-teksta/) - Для того, чтобы в Open XML настроить оформление текста в абзаце используется свойство RunProperties объекта Run. Чтобы сохранить начальные и конечные пробелы в строке текста необходимо использовать свойство Space в объекте Text со значением SpaceProcessingModeValues.Preserve - [Open XML SDK в C#. Работа со стилями](https://csharp.webdelphi.ru/open-xml-sdk-rabota-so-stilyami/) - В этой части мы познакомились с тем, как работать со стилями оформления документа в Open XML, на примере создания стиля абзаца текста. Стили в Open XML добавляются в часть StyleDefinitionsPart как коллекция объектов типа Style. Каждый стиль имеет свое имя, тип, идентификатор, а также настройки, относящиеся к конкретному объекту в документе (абзацу, ячейке таблице и т.д.) - [Привязка в WPF. Относительная привязка](https://csharp.webdelphi.ru/privyazka-v-wpf-otnositelnaya-privyazka/) - Относительная привязка в WPF позволяет привязываться к объектам и их свойствам относительно положения целевого объекта в визуальном дереве. Используя относительную привязку мы можем привязываться либо к самом себе, либо к родительским элементам. - [Привязка в WPF. Свойства и параметры конвертеров значений](https://csharp.webdelphi.ru/privyazka-v-wpf-svojstva-i-parametry-konverterov-znachenij/) - Свойство конвертера значений — это обычное свойство класса, значение которого мы можем задать каким-либо образом, например, при определении конвертера в XAML. Параметр конвертера — это третий параметр в методах Convert() и ConvertBack() конвертера значений. Параметр конвертера задается в свойстве ConverterParameter расширения Binding или MultiBinding. - [Привязка в WPF. Форматирование строк и конвертеры значений](https://csharp.webdelphi.ru/privyazka-v-wpf-formatirovanie-strok-i-konvertery-znachenij/) - Конвертеры значений используются для преобразования одного типа значения свойства в другой тип. При этом, конвертеры могут преобразовывать значения как «один-к-одному», то есть одно значение в другое значение, так и «многие-к-одному» — когда нам необходимо несколько значений свойств преобразовать в одно. Второй способ работы конвертеров использует объект MultiBinding. - [Привязка в WPF. Привязка к произвольным объектам (интерфейс INotifyPropertyChanged)](https://csharp.webdelphi.ru/privyazka-v-wpf-privyazka-k-proizvolnym-obektam-interfejs-inotifypropertychanged/) - В WPF мы можем привязываться к произвольным объектам. При этом, классы таких объектов-источников должны реализовать интерфейс INotifyPropertyChanged, чтобы иметь возможность сообщать об изменении своих свойств. - [Привязка в WPF. Свойства Binding, режимы привязки](https://csharp.webdelphi.ru/privyazka-v-wpf-svojstva-binding-rezhimy-privyazki/) - В привязке данных в WPF центральную роль занимает объект типа Binding. Этот тип предоставляет нам множество свойств, влияющих на процесс привязки данных. В этой части мы рассмотрели свойства Binding, а также детально остановились на режимах привязки в WPF. В WPF режимы привязки устанавливаются с использованием свойства Mode объекта Binding. - [Привязка в WPF. Свойства зависимостей (Dependency Property)](https://csharp.webdelphi.ru/privyazka-v-wpf-svojstva-zavisimostej-dependency-property/) - Привязка в WPF - это мощный механизм предоставления данных и взаимодействия с ними в приложении. Для работы привязки необходим источник и цель привязки, при этом, свойство цели к которому осуществляется привязка обязательно должно быть свойством зависимостей, благодаря чему платформа WPF производит автоматическое обновление данных - [Ресурсы и стили. Стили в WPF](https://csharp.webdelphi.ru/resursy-i-stili-stili-v-wpf/) - [Ресурсы и стили. Подключение внешних ресурсов](https://csharp.webdelphi.ru/resursy-i-stili-podklyuchenie-vneshnix-resursov-2/) - Ресурсы WPF могут определяться в отдельных файлах и подключаться в проект, используя свойство ResourceDictionary.Source. В WPF поддерживается объединение словарей ресурсов как расположенных локально, так и в разных сборках - [Ресурсы и стили. Ресурсы в WPF](https://csharp.webdelphi.ru/resursy-i-stili-resursy-v-wpf/) - Ресурсы приложения WPF хранятся в словаре ResourceDictionaryи могут быть уровня элемента управления, макета, страницы или приложения в целом. Для доступа к ресурсам приложения используются расширения XAML StaticResource или DynamicResource - [Элементы управления в WPF](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf/) - Все элементы управления в WPF - [Элементы управления в WPF. Image и InkCanvas - работа с изображениями](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-image-i-inkcanvas-rabota-s-izobrazheniyami/) - Image и InkCanvas в WPF - работа с изображениями: загрузить изображение из файла, поворот картинки на 90 градусов, использование InkCanvas в WPF - [Элементы управления в WPF. Calendar и DatePicker - работа с датами](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-calendar-i-datepicker-rabota-s-datami/) - Calendar и DatePicker в WPF: выбор даты в WPF, свойства и события Calendar и DatePicker в WPF - [Элементы управления в WPF. ProgressBar и Slider](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-progressbar-i-slider/) - Элементы управления Slider и ProgressBar в WPF: работа с диапазонами значений, выбор диапазона, свойства Slider, работа с ProgressBar в WPF - [Элементы управления в WPF. Элемент DataGrid](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-element-datagrid/) - Элемент DataGrid в WPF и C#: настройка, работа со столбцами DataGrid, свойства DataGrid, внешний вид таблицы DataGrid в WPF - [Элементы управления в WPF. Элемент TreeView](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-element-treeview/) - Элемент TreeView в WPF и C#: построение дерева объектов, настройка TreeView в XAML - [Элементы управления в WPF. Список ListView](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-spisok-listview/) - Список ListView в WPF и C#: отображение списка элементов, произвольные объекты в ListView, перемещение столбцов ListView WPF - [Элементы управления в WPF. Списки элементов ListBox и ComboBox](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-spiski-elementov-listbox-i-combobox/) - Списки элементов ListBox и ComboBox в WPF и C#: работа со списками элементов, свойство Items, ItemSource, программное заполнение ListBox, внешний вид элементов - [Элементы управления в WPF. Работа с текстом](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-rabota-s-tekstom/) - Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox - [Элементы управления в WPF. ScrollViewer - прокрутка содержимого](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-scrollviewer-prokrutka-soderzhimogo/) - ScrollViewer в WPF и - прокрутка содержимого: программная прокрутка, методы прокрутки содержимого в WPF - [Элементы управления в WPF. TabControl и работа с вкладками](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-tabcontrol-i-rabota-s-vkladkami/) - TabControl и работа с вкладками в WPF и C#: создание TabControl, отслеживание активной вкладки TabControl в WPF - [Элементы управления в WPF. Контейнеры GroupBox и Expander](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-kontejnery-groupbox-i-expander/) - Контейнеры GroupBox и Expander в WPF и C#: заголовок содержимого, события раскрытия и скрытия списка элементов - [Работа с текстом и шрифтами в XAML и WPF](https://csharp.webdelphi.ru/rabota-s-tekstom-i-shriftam-v-xaml-i-wpf/) - [Элементы управления в WPF. Всплывающие подсказки ToolTip и Popup](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-vsplyvayushhie-podskazki-tooltip-i-popup/) - Всплывающие подсказки ToolTip и Popup в WPF и C#: настройка внешнего вида подсказки, использование ToolTipService в WPF - [Элементы управления в WPF. CheckBox и RadioButton](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-checkbox/) - Рассматриваем основные моменты по работе с CheckBox в WPF: события Checked, Unchecked и Indeterminate, программное создание CheckBox в WPF - [Элементы управления в WPF. Кнопки](https://csharp.webdelphi.ru/elementy-upravleniya-v-wpf-knopki/) - В статье рассматриваются два вида кнопок WPF - Button и RepeatButton и их основные свойства. - [Контейнеры в WPF. Grid (сетка)](https://csharp.webdelphi.ru/kontejnery-v-wpf-grid-setka/) - В статье рассматривается контейнер Grid (сетка) в WPF. - [Контейнеры в WPF. WrapPanel](https://csharp.webdelphi.ru/kontejnery-v-wpf-wrappanel/) - В статье рассматриваются основные свойства компонента-контейнера WPF WrapPanel - [Контейнеры в WPF. StackPanel](https://csharp.webdelphi.ru/kontejnery-v-wpf-stackpanel/) - В статье рассматриваются основные свойства компонента-контейнера WPF StackPanel - [Свойства размеров и позиционирования XAML-элементов](https://csharp.webdelphi.ru/svojstva-razmerov-i-pozicionirovaniya-xaml-elementov/) - Свойства размеров и позиционирования XAML-элементов в WPF и C# .NET: горизонтальное и вертикальное выравнивание элементов, внутренний и внешний отступ элемента - [Контейнеры в WPF. DockPanel](https://csharp.webdelphi.ru/kontejnery-v-wpf-dockpanel/) - В статье рассматриваются основные свойства компонента-контейнера WPF DockPanel - [Макет приложения (Layout) в WPF](https://csharp.webdelphi.ru/makety-layouts-v-wpf/) - Рассматриваем особенности построения пользовательских интерфейсов в WPF и работу системы макетов - [Контейнеры в WPF. Canvas (холст)](https://csharp.webdelphi.ru/kontejnery-v-wpf-canvas-xolst/) - В статье рассматриваются основные свойства компонента-контейнера WPF Canvas - [Расширение разметки XAML (Markup Extensions)](https://csharp.webdelphi.ru/rasshirenie-razmetki-xaml-markup-extensions/) - [Кисти в XAML. Оформление XAML-элементов](https://csharp.webdelphi.ru/kisti-v-xaml-oformlenie-xaml-elementov/) - Кисти в XAML: - [Пространства имен .NET C# в XAML](https://csharp.webdelphi.ru/prostranstva-imen-net-c-v-xaml/) - Пространства имен .NET C# в XAML. Использование пространств имен C# XAML - [Конвертеры типов и элементы свойств](https://csharp.webdelphi.ru/konvertery-tipov-i-elementy-svojstv/) - В статье рассматривается что из себя представляют конвертеры типов в WPF и как они используются для задания свойств элементов управления в XAML - [Файлы отделенного кода (.cs)](https://csharp.webdelphi.ru/fajly-otdelennogo-koda-cs/) - Состав файла отделенного кода в WPF. Конструктор по умолчанию для класса окна приложения. Атрибут Name и доступ к свойствам элементов управления из кода C# - [Введение в XAML](https://csharp.webdelphi.ru/vvedenie-v-xaml/) - Основные правила языка XAML и применение их на практике - [Первое приложение WPF в Visual Studio Code](https://csharp.webdelphi.ru/pervoe-prilozhenie-wpf-v-visual-studio-code/) - Первое приложение WPF в Visual Studio Code: установка и настройка VS Code для .NET C# WPF - [Первое приложение WPF](https://csharp.webdelphi.ru/pervoe-prilozhenie-wpf/) - Первое приложение WPF в C# .NET: структура проекта, визуальный редактор форм в WPF - [Windows Presentation Foundation (WPF)](https://csharp.webdelphi.ru/windows-presentation-foundation-wpf/) - Рассматриваем ключевые преимущества и ограничения платформы WPF C# - [Ключевые слова in, out и ref в методах C#](https://csharp.webdelphi.ru/klyuchevye-slova-in-out-i-ref-v-metodax-c/) - Знакомимся с модификаторами параметров методов: ref, out, in. Также изучаем вопросы использования необязательных и именованных параметров в методах - [Методы в C#. Возвращаемые значения и оператор return](https://csharp.webdelphi.ru/metody-v-c-vozvrashhaemye-znacheniya/) - Возвращаемые значения методов и оператор return в C# и .NET - [Методы в C#. Параметры методов](https://csharp.webdelphi.ru/metody-v-c-parametry-metodov/) - Параметры методов в C# и .NET: формальные и фактические параметры, передача параметров по позиции, именованные и необязательные параметры методов C# - [Методы в C#](https://csharp.webdelphi.ru/metody-v-c/) - Методы в C# и .NET: как объявить метод, как вызвать метод, преимущества методов, зачем нужны методы в программировании - [Контрольное задание по главе «Методы в C#». Финальная версия игры «Угадай число»](https://csharp.webdelphi.ru/kontrolnoe-zadanie-po-glave-metody-v-c-finalnaya-versiya-igry-ugadaj-chislo/) - Финальная версия игры «Угадай число», написанной на C#, исходный код игры с описанием - [Контрольное задание по главе «Консольные приложения». Доработка игры «Угадай число»](https://csharp.webdelphi.ru/kontrolnoe-zadanie-po-glave-konsolnye-prilozheniya-dorabotka-igry-ugadaj-chislo/) - Доработка игры «Угадай число»: как сделать повтор игры, как сделать цветной текст в консоли, как перенаправить потоки ввода/вывода консоли - [Контрольное задание по главе "Основы языка C#". Игра "Угадай число"](https://csharp.webdelphi.ru/kontrolnoe-zadanie-po-glave-osnovy-yazyka-c-igra-ugadaj-chislo/) - Контрольное задание по главе "Основы языка C#". Игра "Угадай число" - [Консольный ввод/вывод в C#](https://csharp.webdelphi.ru/konsolnyj-vvod-vyvod-v-c/) - Консольный ввод/вывод в C# и .NET: класс Console, методы ввода и вывода строк в консоль, чтение из консоли, запись в консоль - [Неявно типизированные переменные и анонимные типы (ключевое слово var)](https://csharp.webdelphi.ru/neyavno-tipizirovannye-peremennye-i-anonimnye-tipy-klyuchevoe-slovo-var/) - Неявно типизированные переменные и анонимные типы (ключевое слово var). Случаи использования ключевого слова var в - [Жесты в .NET MAUI. Касание (Tap)](https://csharp.webdelphi.ru/zhesty-v-net-maui-kasanie-tap/) - Жесты в .NET MAUI: виды жестов в мобильных приложениях, жест касание, как распознать касание по произвольному элементу управления - [Циклы C#: создание и управление циклами, циклы с пред и постусловиями](https://csharp.webdelphi.ru/cikly-c/) - Рассматриваем циклы в C#: for, while, do while, foreach, операторы управления циклами в C# break и continue - [Шифрование, цифровые подписи и хэш-алгоритмы в .NET. Введение](https://csharp.webdelphi.ru/shifrovanie-cifrovye-podpisi-i-xesh-algoritmy-v-net-vvedenie/) - Обзор основных криктографических алгоритмов и хэш-алгоритмов, поддерживаемых платформой .NET - [Жесты в .NET MAUI. Жест смахивания (swipe)](https://csharp.webdelphi.ru/zhesty-v-net-maui-zhest-smaxivaniya-swipe/) - Жест смахивания (swipe) в .NET MAUI и C#: как распознать жест, как создать скрытую панель с элементами меню, как свайпнуть элемент и показать меню - [Чтение и запись текстовых файлов в C#. StreamWriter и StreamReader](https://csharp.webdelphi.ru/chtenie-i-zapis-tekstovyx-fajlov-v-c/) - StreamWriter и StreamReader - классы для работы с текстовыми файлами в C#. В статье рассматриваются основные методы классов для работы с текстовыми файлами - [Структуры (struct) в C#](https://csharp.webdelphi.ru/struktury-struct-v-c/) - Структура (struct) в C# - это пользовательский тип данных, который используется наряду с классами. Одно из отличий структуры от класса заключается в том, что... - [Массивы в C#](https://csharp.webdelphi.ru/massivy-v-c/) - Работа с массивами в C# и .NET. Для чего нужны массивы, какие бывают массивы, как получить доступ к элементам массива, основные свойства и методы в C# - [Побитовые операторы и операторы сдвига в C#](https://csharp.webdelphi.ru/pobitovye-operatory-i-operatory-sdviga-v-c/) - Операции побитовых сдвигов и побитовые операторы применяются к целочисленным значениям и оперируют разрядами чисел в двоичном формате. Операторы сдвига влево или вправо умножают или делят число на 2, побитовые операторы могут использоваться для работы с битовыми флагами и масками, в операциях шифрования данных и других областях. - [Принципы SOLID](https://csharp.webdelphi.ru/principy-solid/) - Принципы SOLID в C#: пять принципов объектно-ориентированного программирования - [SOLID: Принцип инверсии зависимостей (DIP) в C#](https://csharp.webdelphi.ru/solid-princip-inversii-zavisimostej-dip-v-c/) - Принцип инверсии зависимостей (DIP) в C# и .NET: смысл DIP, как реализовать принцип инверсии зависимостей в C#, пример инверсии зависимостей в C# - [SOLID: Принцип разделения интерфейсов (ISP) в C#](https://csharp.webdelphi.ru/solid-princip-razdeleniya-interfejsov-isp-v-c/) - Принцип разделения интерфейсов (ISP) в C# и .NET: суть принципа разделения интерфейсов, применение ISP в C#, преимущества принципа разделения интерфейсов - [Принцип подстановки Лисков (LSP) в C#](https://csharp.webdelphi.ru/princip-podstanovki-liskov-lsp-v-c/) - Принцип подстановки Лисков (LSP) в C# и .NET: суть принципа LSP, пример использования LSP в C#, преимущества solid lsp - [SOLID: Принцип открытости-закрытости (OCP)](https://csharp.webdelphi.ru/solid-princip-otkrytosti-zakrytosti-ocp/) - Принцип открытости-закрытости (OCP) в C# и .NET: применение SOLID OCP в C#, пример применения принципа открытости-закрытости в C# - [SOLID: Принцип единственной ответственности (SRP)](https://csharp.webdelphi.ru/solid-princip-edinstvennoj-otvetstvennosti-srp/) - Принцип единственной ответственности (SRP) в C# и .NET: что такое принцип единственной ответственности, в чем смысл принципа единственной ответственности, как использовать SRP в C# - [LINQ в C#](https://csharp.webdelphi.ru/linq-v-c/) - Основы LINQ в C#: синтаксис выражений, методы расширения - [Разработка под Android в .NET MAUI. Работа с фото и видеофайлами](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-rabota-s-foto-i-videofajlami/) - Работа с фото и видеофайлами в .NET MAUI: доступ к камере устройства, выбрать фотографию в android, сделать фотографию и открыть в приложении, - [Разработка под Android в .NET MAUI. Выбор файлов](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-vybor-fajlov/) - Выбор файлов в .NET MAUI и C#: использование стандартного средства выбора файлов, IFilePicker и его методы PickAsync(), PickMultipleAsync(), - [Разработка под Android в .NET MAUI. Класс Location](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-klass-location/) - Класс Location в .NET MAUI и C#: как рассчитать расстояние между двумя точками с координатами GPS (WGS-84 - [Разработка под Android в .NET MAUI. Геолокация](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-geolokaciya/) - Геолокация в .NET MAUI и C#: использование геолокации, получение данных о местоположении, определение координат GPS в .NET MAUI - [Разработка под Android в .NET MAUI. Встряхивание устройства](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-vstryaxivanie-ustrojstva/) - Встряхивание устройства в .NET MAUI и C#: событие ShakeDetected акселерометра (класс Accelerometer) - [Разработка под Android в .NET MAUI. Датчики устройства](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-datchiki-ustrojstva/) - Датчики устройства в .NET MAUI и C#: проверка наличия датчика на устройстве, запуск и остановка датчика - [Разработка под Android в .NET MAUI. Показания датчиков устройства](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-pokazaniya-datchikov-ustrojstva/) - Показания датчиков устройства в .NET MAUI и C#: подписка на событие ReadingChanged, получение данных, типы данных, получаемых с датчиков - [Разработка под Android в .NET MAUI. Проверка сетевых подключений](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-proverka-setevyx-podklyuchenij/) - Проверка сетевых подключений .NET MAUI и C#: интерфейс IConnectivity и класс - [Разработка под Android в .NET MAUI. Отправка SMS](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-otpravka-sms/) - Отправка SMS в .NET MAUI и C#: интерфейс ISms - [Разработка под Android в .NET MAUI. Набор телефонного номера](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-nabor-telefonnogo-nomera/) - Набор телефонного номера в .NET MAUI и C#: использование интерфейса IPhoneDialer - [Разработка под Android в .NET MAUI. Выбор контакта на устройстве](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-vybor-kontakta-na-ustrojstve/) - Выбор контакта на устройстве Android в .NET MAUI и - [Лабораторная работа по C#. Работа с числами и строками](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-rabota-s-chislami-i-strokami/) - Лабораторная работа по C#: - [Лабораторная работа по C#. Вычисление последовательности](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-vychislenie-posledovatelnosti/) - Лабораторные работы C#: вычисление элементов последовательности - [Литералы в C#](https://csharp.webdelphi.ru/literaly-v-c/) - Рассматриваем типы литералов в C#, как использовать литералы в приложениях, как представить число в двоичной и шестнадцатеричной системах, escape- управляющие последовательности - [Переменные и константы в C#](https://csharp.webdelphi.ru/peremennye-v-c/) - В статье рассмотрены вопросы использования переменных в C#: правила именования переменных, определения типа переменных, неявно типизированные и пустые переменные C# - [Контейнеры компоновки (макеты). AbsoluteLayout](https://csharp.webdelphi.ru/kontejnery-komponovki-makety-absolutelayout/) - Контейнер компоновки AbsoluteLayout позволяет размещать дочерние компоненты, используя абсолютные или пропорциональные значения положения и размеров дочернего элемента - [Разработка под Android в .NET MAUI. Получение разрешений](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-poluchenie-razreshenij/) - Получение разрешений Android в .NET MAUI и C#: использование атрибутов сборки, использование манифеста приложения, использование класса Permissions - [Разработка под Android в .NET MAUI. Действия приложения (ярлыки)](https://csharp.webdelphi.ru/razrabotka-pod-android-v-net-maui-dejstviya-prilozheniya-yarlyki/) - Действия приложения в .NET MAUI и C#: настройка действий приложения в ANdroid, обработка действий приложения в .NET MAUI Android - [Доступ к данным в .NET MAUI. Миграции EF Core в .NET MAUI](https://csharp.webdelphi.ru/dostup-k-dannym-v-net-maui-migracii-ef-core-v-net-maui/) - Миграции EF Core в .NET MAUI и C#: подробная инструкция использования миграций EF Core в проекте .NET MAUI - [Доступ к данным в .NET MAUI. SQLite и EF Core в .NET MAUI](https://csharp.webdelphi.ru/dostup-k-dannym-v-net-maui-sqlite-i-ef-core-v-net-maui/) - SQLite и EF Core в .NET MAUI и C#: подключение к SQLite, команды для добавления, редактирования и удаления объектов SQLite, настройка EF Core для .NEt - [Доступ к данным в .NET MAUI. Локальные базы данных SQLite в .NET MAUI](https://csharp.webdelphi.ru/dostup-k-dannym-v-net-maui-lokalnye-bazy-dannyx-sqlite-v-net-maui/) - SQLite в .NET MAUI и C#: подключение к бзе данных, чтение, запись и обновление данных, использование SQLite в приложении - [Конфигурация приложения .NET MAUI. Защищенное хранилище (ISecureStorage)](https://csharp.webdelphi.ru/konfiguraciya-prilozheniya-net-maui-zashhishhennoe-xranilishhe-isecurestorage/) - Защищенное хранилище в .NET MAUI и C#: интерфейс ISecureStorage и класс SecureStorage - [Конфигурация приложения .NET MAUI. Менеджер предпочтений (IPreferences)](https://csharp.webdelphi.ru/konfiguraciya-prilozheniya-net-maui-menedzher-predpochtenij-ipreferences/) - Менеджер предпочтений в .NET MAUI и C#: интерфейс IPreferences и класс Preferences - запись и чтение настроек приложения - [Конфигурация приложения .NET MAUI. Конфигурация в памяти](https://csharp.webdelphi.ru/konfiguraciya-prilozheniya-net-maui-konfiguraciya-v-pamyati/) - Конфигурация приложения .NET MAUI. Сервис IConfiguration, использование конфигурации приложения в памяти - [Маршрутизация и навигация в NET MAUI. Отложенный переход](https://csharp.webdelphi.ru/marshrutizaciya-i-navigaciya-v-net-maui-otlozhennyj-perexod/) - Отложенный переход в .NET MAUI и C#: как отменить навигацию, как предложить выбор при переходе на страницу, класс ShellNavigatingEventArgs, токен отмены навигации - [Маршрутизация и навигация в NET MAUI. Получение и передача данных в параметрах URI](https://csharp.webdelphi.ru/marshrutizaciya-i-navigaciya-v-net-maui-poluchenie-i-peredacha-dannyx-v-parametrax-uri/) - Передача данных в параметрах URI в .NET MAUI и C#: получение данных в URI, передача данных в URI, IQueryAttributable, QueryPropertyAttribute - [Регистрация дополнительных маршрутов](https://csharp.webdelphi.ru/registraciya-dopolnitelnyx-marshrutov/) - Регистрации дополнительных маршрутов в .NET MAUI Shell и C#: как зарегистрировать дополнительный маршрут, глобальные маршруты и перемещение по ним - [Маршрутизация и навигация в NET MAUI. Маршруты](https://csharp.webdelphi.ru/marshrutizaciya-i-navigaciya-v-net-maui-marshruty/) - Маршруты в .NET MAUI и C#: создание маршрута, навигация по маршрутам в Shell, как получить текущий маршрут - [MVVM в .NET MAUI. Отключение команд](https://csharp.webdelphi.ru/mvvm-v-net-maui-otklyuchenie-komand/) - Отключение команд в .NET MAUI и C#: метод CanExecute, метод - [MVVM в .NET MAUI. Параметры команды](https://csharp.webdelphi.ru/mvvm-v-net-maui-parametry-komandy/) - Параметры команды в .NET MAUI и C#: использование параметров команды, привязка параметров команды, удаление элемента из списка с помощью параметров каоманд - [MVVM в .NET MAUI. Команды (ICommand)](https://csharp.webdelphi.ru/mvvm-v-net-maui-komandy-icommand/) - [MVVM в .NET MAUI. Введение](https://csharp.webdelphi.ru/mvvm-v-net-maui-vvedenie/) - MVVM в .NET MAUI и C#: описание паттерна MVVM, применение в приложении, пример приложения .NET MAUI с паттерном MVVM - [Внедрение зависимостей в .NET MAUI. Вызов кода платформы](https://csharp.webdelphi.ru/vnedrenie-zavisimostej-v-net-maui-vyzov-koda-platformy/) - Вызов кода платформы в .NET MAUI и C#: использование условной компиляции, использование разделяемых (частичных) классов и методов для реализации сервиса - [Внедрение зависимостей в .NET MAUI. Сервисы с ключами](https://csharp.webdelphi.ru/vnedrenie-zavisimostej-v-net-maui-servisy-s-klyuchami/) - Сервисы с ключами в .NET MAUI и C#: зачем использовать сервисы с ключами, как зарегистрировать и получить сервис с ключами - [Внедрение зависимостей в .NET MAUI. Основные способы получения сервисов](https://csharp.webdelphi.ru/vnedrenie-zavisimostej-v-net-maui-osnovnye-sposoby-polucheniya-servisov/) - Основные способы получения сервисов в .NET MAUI и C#: внедрение через конструктор, явное разрешение сервисов (service locator) - [Внедрение зависимостей в .NET MAUI. Методы регистрации зависимостей](https://csharp.webdelphi.ru/vnedrenie-zavisimostej-v-net-maui-metody-registracii-zavisimostej/) - Методы регистрации сервисов в .NET MAUI и C#: варианты методов регистрации сервисов, применение фабрики для создания сервиса - [Внедрение зависимостей в .NET MAUI. Жизненный цикл зависимостей](https://csharp.webdelphi.ru/vnedrenie-zavisimostej-v-net-maui-zhiznennyj-cikl-zavisimostej/) - Жизненный цикл зависимостей в .NET MAUI и C#: transient, singleton, scoped сервисы, различия работы сервисов в зависимости от их жизненного цикла - [Внедрение зависимостей в .NET MAUI. Введение](https://csharp.webdelphi.ru/vnedrenie-zavisimostej-v-net-maui-vvedenie/) - Внедрение зависимостей в .NET MAUI: контейнер зависимостей, зависимость, сервис и его реализация - [Анимация в .NET MAUI. Плавность и скорость анимации](https://csharp.webdelphi.ru/animaciya-v-net-maui-plavnost-i-skorost-animacii/) - Анимация в .NET MAUI и C#: эффекты для анимации, ускорение или замедление анимации в начале, в конце, эффект отскока и возврата в анимацмм - [Анимация в .NET MAUI. Основы анимации](https://csharp.webdelphi.ru/animaciya-v-net-maui-osnovy-animacii/) - Анимация в .NET MAUI и C#: использвание методов расширения для анимации, анимации в триггерах .NET MAUI, составные анимации - [Триггеры в .NET MAUI. Мульти-триггеры](https://csharp.webdelphi.ru/triggery-v-net-maui-multi-triggery/) - Мульти-триггеры в .NET MAUI и C#: использование мультитриггеров, класс MultiTrigger, определение условий мультитриггера - [Триггеры в .NET MAUI. Триггеры свойств](https://csharp.webdelphi.ru/triggery-v-net-maui-triggery-svojstv/) - Триггеры свойств в .NET MAUI и C#: использование триггера свойств, класс Trigger и его свойства, триггер свойства в стиле - [Триггеры в .NET MAUI. Триггеры состояний](https://csharp.webdelphi.ru/triggery-v-net-maui-triggery-sostoyanij/) - Триггеры состояний в .NET MAUI и C#: использование триггера состояний StateTrigger в приложении. - [Триггеры в .NET MAUI. Триггеры событий](https://csharp.webdelphi.ru/triggery-v-net-maui-triggery-sobytij/) - Триггеры событий (Action Triggers) в .NET MAUI и C#: создание действия триггера TriggerAction, применение триггера к элементу управления - [Триггеры в .NET MAUI. Триггеры данных](https://csharp.webdelphi.ru/triggery-v-net-maui-triggery-dannyx/) - Триггеры данных в .NET MAUI и C#: использование триггеров данных, DataTrigger и отслеживание свойств своего класса - [Выпадающий список Picker в .NET MAUI](https://csharp.webdelphi.ru/vypadayushhij-spisok-picker-v-net-maui/) - Создание выпадающего списка с помощью элемента Picker в .NET MAUI и C#. Выбор элементов, указание элементов списка в XAML - [Привязка в .NET MAUI. Привязка списков и шаблоны данных (DataTemplate)](https://csharp.webdelphi.ru/privyazka-v-net-maui-privyazka-spiskov-i-shablony-dannyx-datatemplate/) - Привязка списков и шаблоны данных (DataTemplate) в .NET MAUI и C# - [Привязка в .NET MAUI. Привязка к произвольным объектам (интерфейс INotifyPropertyChanged)](https://csharp.webdelphi.ru/privyazka-v-net-maui-privyazka-k-proizvolnym-obektam-interfejs-inotifypropertychanged/) - Привязка к объектам в .NET MAUI и C#: реализация интерфейса INotifyPropertyChanged. сообщение об изменении свойства объекта - [Привязка в .NET MAUI. Относительная привязка](https://csharp.webdelphi.ru/privyazka-v-net-maui-otnositelnaya-privyazka/) - Относительная привязка в .NET MAUI и C#: свойство RelativeSource, использование относительной привязки к самому себе, свойства AncestorType, AncestorLevel - [Привязка в .NET MAUI. Свойства и параметры конвертеров значений](https://csharp.webdelphi.ru/privyazka-v-net-maui-svojstva-i-parametry-konverterov-znachenij/) - Свойства и параметры конвертеров значений в .NET MAUI и C#: как использовать свойства конвертера, как использовать параметры конвертера, ConverterParameter - [Привязка в .NET MAUI. Форматирование строк и конвертеры значений (IValueConverter и IMultiValueConverter)](https://csharp.webdelphi.ru/privyazka-v-net-maui-formatirovanie-strok-i-konvertery-znachenij-ivalueconverter-i-imultivalueconverter/) - Конвертеры значений в .NET MAUI и C#: форматирование строк, интерфейс IValueConverter, интерфейс IMultiValueConverter, множественная привязка и MultiBinding - [Привязка в .NET MAUI. Режим привязки](https://csharp.webdelphi.ru/privyazka-v-net-maui-rezhim-privyazki/) - Режим привязки в .NET MAUI и C#: Binding Mode, односторонняя привязка, двухсторонняя привязка, Default, OneTime, OneWay, OneWayToSource, TwoWay - [Привязка в .NET MAUI. Основы привязки](https://csharp.webdelphi.ru/privyazka-v-net-maui-osnovy-privyazki/) - Привязка в .NET MAUI и C#: основы привязки, Binding, привязка в коде C#, привязка в XAML, контекст привязки - [Ресурсы и стили. Использование менеджера визуальных состояний (Visual State Manager)](https://csharp.webdelphi.ru/resursy-i-stili-ispolzovanie-menedzhera-vizualnyx-sostoyanij-visual-state-manager/) - Visual State Manager в .NET MAUI и C#: использование VisualStateManager, визуальные состояния элементов управления, свои визуальные состояния компонентов в .NET MAUI - [Ресурсы и стили. Реакция на изменение системной темы устройства (AppThemeBinding)](https://csharp.webdelphi.ru/resursy-i-stili-reakciya-na-izmenenie-sistemnoj-temy-ustrojstva-appthemebinding/) - AppThemeBinding в .NET MAUI и C#: Реакция на изменение системной темы устройства - [Ресурсы и стили. Использование стилей](https://csharp.webdelphi.ru/resursy-i-stili-ispolzovanie-stilej/) - Стили в .NET MAUI и C#: использование стилей, класс Style, наследование стилей, приоритет стилей, классы стилей - [Ресурсы и стили. Подключение внешних ресурсов](https://csharp.webdelphi.ru/resursy-i-stili-podklyuchenie-vneshnix-resursov/) - Подключение внешних ресурсов в .NET MAUI и C#: файл ресурсов. объединение локальных и внешних ресурсов, как получить ресурсы XAML из другой сборки - [Ресурсы и стили. Ресурсы в .NET MAUI](https://csharp.webdelphi.ru/resursy-i-stili-resursy-v-net-maui/) - Ресурсы в .NET MAUI и C#: виды ресурсов, поиск ресурсов в словаре ResourceDictionary, расширения XAML StaticResource и DynamicResource - [Shell. Организация поиска в приложении (SearchHandler)](https://csharp.webdelphi.ru/shell-organizaciya-poiska-v-prilozhenii-searchhandler/) - SearchHandler в .NET MAUI и C#: пошаговая инструкция как организовать поиск в приложении. - [Shell. Работа со страницами приложения](https://csharp.webdelphi.ru/shell-rabota-so-stranicami-prilozheniya/) - Shell в .NET MAUI: настройка внешнего вида страниц, глобальная настройка цветов страниц, переопределение настроек страниц - [Shell. Работа с вкладками (TabBar и Tab)](https://csharp.webdelphi.ru/shell-rabota-s-vkladkami-tabbar-i-tab/) - TabBar и Tab в .NET MAUI и C#: показать нижнюю панель вкладок, разместить страницы приложения во вкладках, изменить внешний вид вкладок меню - [Shell. Работа с меню (FlyoutItem и MenuItem)](https://csharp.webdelphi.ru/shell-rabota-s-menyu-flyoutitem-i-menuitem/) - FlyoutItem и MenuItem в .NET MAUI и C#: работа с меню, элементы меню, заголовок и подвал меню в .NET MAUI - [Страницы приложения .NET MAUI. Класс TabbedPage](https://csharp.webdelphi.ru/stranicy-prilozheniya-net-maui-klass-tabbedpage/) - TabbedPage в .NET MAUI и C#: создание вкладок в приложении .NET MAUI - [Shell. Содержимое оболочки (ShellContent)](https://csharp.webdelphi.ru/shell-soderzhimoe-obolochki-shellcontent/) - Shell в .NET MAUI и C#: создание приложения оболочки, добавление пунктов меню в приложении .NET MAUI, иконка пункта меню - [Страницы приложения .NET MAUI. Класс FlyoutPage](https://csharp.webdelphi.ru/stranicy-prilozheniya-net-maui-klass-flyoutpage/) - FlyoutPage в .NET MAUI и C#: как создать боковое меню в приложении .NET MA - [Страницы приложения .NET MAUI. Классы ContentPage и NavigationPage](https://csharp.webdelphi.ru/stranicy-prilozheniya-net-maui-klassy-contentpage-i-navigationpage/) - NavigationPage в .NET MAUI и C#: навигация по страницам приложения, управление навигацией в .NET MAUI, корневая страница приложения, модальное окно .NET MAUI - [Страницы приложения .NET MAUI. Класс Page](https://csharp.webdelphi.ru/stranicy-prilozheniya-net-maui-klass-page/) - Класс Page в .NET MAUI и C#: свойства, методы, события Page. Вызов диалоговых окон в .NET MAUI - [Табличное представление элементов в .NET MAUI: элемент TableView](https://csharp.webdelphi.ru/tablichnoe-predstavlenie-elementov-v-net-maui-element-tableview/) - Элемент TableView в .NET MAUI и C#. Как создать страницу с настройками приложения, используя TableView - [Индикация прогресса в .NET MAUI: ActivityIndicator и ProgressBar](https://csharp.webdelphi.ru/indikaciya-progressa-v-net-maui-activityindicator-i-progressbar/) - ActivityIndicator и ProgressBar в .NET MAUI и C# - [Выбор даты и времени: DatePicker и TimePicker в .NET MAUI](https://csharp.webdelphi.ru/vybor-daty-i-vremeni-datepicker-i-timepicker-v-net-maui/) - DatePicker и TimePicker предназначены для выбора даты и времени в приложениях .NET MAUI и C#. При этом, TimePicker при работе в Windows имеет свою особенность - любая строка формата времени влияет только на отображение часов в значении времени, а остальные параметры формата игнорируются. - [Работа с числовыми значениями: Stepper и Slider в .NET MAUI](https://csharp.webdelphi.ru/rabota-s-chislovymi-znacheniyami-stepper-i-slider-v-net-maui/) - Элементы Stepper и Slider в .NET MAUI и C#: работа с числовыми значениями в заданном диапазоне - [Переключатели в .NET MAUI: RadioButton](https://csharp.webdelphi.ru/pereklyuchateli-v-net-maui-radiobutton/) - Элемент RadioButton .NET MAUI: группировка RadioButton, отслеживание состояния RadioButton, произвольное содержимое в RadioButton, использование присоединенных свойств для группировки RadioButton - [Переключатели в .NET MAUI: CheckBox и Switch](https://csharp.webdelphi.ru/pereklyuchateli-v-net-maui-checkbox-i-switch/) - CheckBox и Switch в .NET MAUI: как использовать, свойства CheckBox, свойства Switch, как отслеживать состояние переключателя. Как изменить цвет Switch, как изменить цвет CheckB - [Текстовые поля в .NET MAUI: Editor и Entry](https://csharp.webdelphi.ru/tekstovye-polya-v-net-maui-editor-i-entry/) - Как использовать текстовое поле .NET MAUI, как изменить тип клавиатуры maui, как изменить иконку на кнопке ввод клавиатуры, клавиатура для ввода чисел maui - [Кнопки в .NET MAUI: Button и ImageButton](https://csharp.webdelphi.ru/knopki-v-net-maui-button-i-imagebutton/) - Кнопки в .NET MAUI реагируют на три события - Clicked, Pressed и Released. При этом, мы можем использовать два вида кнопок: Button - обычная кнопка с текстовым содержимым и ImageButton - кнопка, у которой в качестве содержимого выступает какое-либо изображение. - [.NET MAUI. Работа с текстом и шрифтами](https://csharp.webdelphi.ru/net-maui-rabota-s-tekstom-i-shriftami/) - Работа со шрифтами и текстом в .NET MAUI: зарегистрировать шрифт в приложении, изменить размер шрифта, сделать текст зачеркнутым. Свойства FontFamily, TextDecorations - [.NET MAUI. Работа с цветом (класс Color)](https://csharp.webdelphi.ru/net-maui-rabota-s-cvetom-klass-color/) - Работа с цветом в .NET MAUI и C#, класс Color, свойство Background, цвет текста и фона элемента, метод Color.FromArgb, установка цвета в коде XAML, изменение цвета .NET MAUI - [Контейнеры компоновки (макеты). Grid](https://csharp.webdelphi.ru/kontejnery-komponovki-makety-grid/) - Контейнер компоновки Grid используется для размещения содержимого в виде сетки. Размеры ячеек сетки могут задаваться как в абсолютных величинах, так и пропорционально. При необходимости, мы можем объединять строки и столбцы сетки, используя присоединенные свойства. - [Контейнеры компоновки (макеты). FlexLayout](https://csharp.webdelphi.ru/kontejnery-komponovki-makety-flexlayout/) - Контейнер FlexLayout имеет более широкие возможности настройки расположения дочерних элементов. Используя FlexLayout, мы можем располагать элементы равномерно вдоль основной оси, приживать их к началу или концу основной оси, переносить или, наоборот, запретить перенос элементов в контейнере и т.д. - [Контейнеры компоновки (макеты). StackLayout, HorizontalStackLayout и VerticalStackLayout](https://csharp.webdelphi.ru/kontejnery-komponovki-makety-stacklayout-horizontalstacklayout-i-verticalstacklayout/) - Для компоновки элементов управления на странице приложения мы можем использовать различные контейнеры (макеты). Компонент-контейнер StackLayout позволяет упорядочивать компоненты по горизонтали и вертикали. В свою очередь, HorizontalStackLayout упорядочивает компоненты только по горизонтали, а VerticalStackLayout - только по вертикали. - [Свойства размеров и позиционировния XAML-элементов](https://csharp.webdelphi.ru/svojstva-razmerov-i-pozicionirovatsya-xaml-elementov/) - Рассматриванием основные свойства размеров и позиционирования XAML-элментов - [XAML-элементы](https://csharp.webdelphi.ru/xaml-elementy/) - Атрибуты в элементах XAML являются свойствами объектов C#. При этом, для XAML-элементов может определяться содержимое. Содержимое элемента может определяться несколькими способами, но оно (содержимое) может быть у элемента только одно. - [Введение в XAML](https://csharp.webdelphi.ru/vvedenie-v-xaml-2/) - Введение в XAML: что такое xaml, пространства имен xaml, code-behind xaml, структура документа xaml - [Первое приложение .NET MAUI](https://csharp.webdelphi.ru/pervoe-prilozhenie-net-maui/) - Первое приложение .NET MAUI: запуск приложения в Windows и Android - [Общие сведения о .NET MAUI](https://csharp.webdelphi.ru/obshhie-svedeniya-o-net-maui/) - Что такое .NET MAUI? Как работает .NET MAUI и какие платформы поддерживаются - [Как отправить запрос из приложения Blazor Hybrid к ASP.NET Core Web API, используя протокол HTTP?](https://csharp.webdelphi.ru/kak-otpravit-zapros-iz-prilozheniya-blazor-hybrid-k-asp-net-core-web-api-ispolzuya-protokol-http/) - При попытке отправить данные с клиента Blazor Hybrid в приложение ASP.NET Core Web API я столкнулся с тем, что клиент постоянно выдает ошибку "Connection failure". Разберемся с тем, как отправить запрос из приложения Blazor Hybrid к ASP.NET Core Web API, используя протокол HTTP. - [Ошибка XALNS7019 Access to the path .dll is denied](https://csharp.webdelphi.ru/oshibka-xalns7019-access-to-the-path-dll-is-denied/) - Ошибка XALNS7019 Access to the path .dll is denied - как избавиться от этой ошибки в .NET MAUI Blazor Hybrid - [Универсальные шаблоны (generics) в C#](https://csharp.webdelphi.ru/universalnye-shablony-generics-v-c/) - Рассматриваем работу с универсальными шаблонами (generics, обобщения) в C#: создание шаблонов, ограничения шаблонов, шаблонные методы, унаследование универсальных типов - [Классы и объекты C#](https://csharp.webdelphi.ru/klassy-i-obekty-c/) - Знакомимся с основными моментами создания классов и объектов в C#, создаем первый класс C# и учимся использовать конструкторы и инициализаторы объектов C#, с# работа с классами - [Работа со статическими файлами в Blazor Hybrid](https://csharp.webdelphi.ru/rabota-so-staticheskimi-fajlami-v-blazor-hybrid/) - В проекте Blazor Hybrid статические файлы могут располагаться как в папке wwwroot (как и во всех проектах Blazor), так и в папке Resources/Raw (необработанные ресурсы). Чтобы получить доступ к содержимому этих файлов мы можем использовать метод класса FileSystem. - [IMediaPicker - работа с фото и видео в Android](https://csharp.webdelphi.ru/imediapicker-rabota-s-foto-i-video-v-android/) - Интерфейс IMediaPicker предоставляет нам базовый функционал по работе с мультимедиа на устройстве Android - выбрать файл, используя штатные средства устройства или сделать фотографию. Успешный вызов того или иного метода интерфейса возвращает нам объект типа FileResult, используя который, мы должны самостоятельно решать, что необходимо сделать с файлом - отобразить в приложении, сохранить в общедоступном месте на устройстве и так далее. - [IGeolocation - использование геолокации в Android](https://csharp.webdelphi.ru/igeolocation-ispolzovanie-geolokacii-v-android/) - [Акселерометр, барометр, компас и другие датчики в Android](https://csharp.webdelphi.ru/akselerometr-barometr-kompas-i-drugie-datchiki-v-android/) - Все доступные для работы интерфейсы датчиков располагаются в пространстве имен Microsoft.Maui.Devices.Sensors. Работа с датчиками строится по одному принципу - мы должны проверить доступность датчика, вызвать метод Start(), указав скорость чтения данных с датчика и подписаться на событие обновления данных датчика. - [IConnectivity - проверка сетевых подключений в Android](https://csharp.webdelphi.ru/iconnectivity-proverka-setevyx-podklyuchenij-v-android/) - Проверка сетевых подключений в Android осуществляется с использованием интерфейса IConnectivity. Для получения состояния подключения к сети приложение должно иметь разрешение ACCESS_NETWORK_STATE. - [IPhoneDialer и ISms - набор номера и обмен SMS в Android](https://csharp.webdelphi.ru/iphonedialer-i-isms-nabor-nomera-i-obmen-sms-v-android/) - Для набора номера и обмена SMS в Android используются интерфейсы IPhoneDialer и ISms. Эти интерфейсы используются для того, чтобы открыть стороннее приложение, установленное на устройстве пользователя для выполнения определенных действий. Поэтому, если мы используем Android 11 или более позднюю версию, то мы должны обязательно добавить в манифест приложения фильтр намерений для того, чтобы наше приложение могло запускать другие приложения. - [IContacts - работа с контактами в Android](https://csharp.webdelphi.ru/icontacts-rabota-s-kontaktami-v-android/) - Для чтения контактов в Android используется интерфейс IContacts у которого определено два метода - для чтения всего списка контактов и выбора контакта из адресной книги. Запись контактов на момент написания этой статьи не поддерживалась. Перед получением доступа к контактам на устройстве Android необходимо явно получить разрешение на такое действие. - [Blazor Hybrid - разработка под Android](https://csharp.webdelphi.ru/blazor-hybrid-razrabotka-pod-android/) - [Встроенные компоненты Razor для работы с формами](https://csharp.webdelphi.ru/vstroennye-komponenty-razor-dlya-raboty-s-formami/) - Для работы с элементами форм в Blazor имеются встроенные компоненты, поддерживающие двухстороннюю привязку, а также валидацию на основе атрибутов. Использование этих компонентов рекомендуется при разработке приложений. - [ISecureStorage - хранение настроек приложения в защищенном хранилище](https://csharp.webdelphi.ru/isecurestorage-xranenie-nastroek-prilozheniya-v-zashhishhennom-xranilishhe/) - ISecureStorage — это интерфейс, предоставляющий нам API для хранения настроек приложения в виде пар «ключ-значение» в защищенном хранилище устройства. Интерфейс реализуется статическим классом SecureStorage, который содержится в пространстве имен Microsoft.Maui.Storage. В качестве типов данных для записи SecureStorage принимает только строки. - [IPreferences - хранение настроек приложения в хранилище ключей и значений устройства](https://csharp.webdelphi.ru/ipreferences-xranenie-nastroek-prilozheniya-v-xranilishhe-klyuchej-i-znachenij-ustrojstva/) - IPreferences - это интерфейс, предоставляющий нам API для хранения настроек приложения в виде пар "ключ-значение" в хранилище устройства. Интерфейс реализуется статическим классом Preferences, который содержится в пространстве имен Microsoft.Maui.Storage - [Проекция конфигурации на классы](https://csharp.webdelphi.ru/proekciya-konfiguracii-na-klassy-2/) - Проецирование конфигурации на классы позволяет предоставить в приложении все настройки в виде обычного объекта .NET заданного типа. Такой подход удобно применять в случае использования конфигурации в виде JSON-файлов. В классе .NET свойства должны соответствовать именам настроек. Проецировать мы можем как отдельные секции файла, так и файл целиком, использую методы расширения Bind() и Get() для IConfiguration. - [Использование JSON-файлов для конфигурации приложения Blazor Hybrid](https://csharp.webdelphi.ru/ispolzovanie-json-fajlov-dlya-konfiguracii-prilozheniya-blazor-hybrid/) - В Blazor Hybrid мы можем использовать конфигурацию приложения в виде JSON-файлов. При этом, JSON-файл должен определяться в приложении как встроенный ресурс. Конфигурация в виде JSON может содержать секции с настройками, что делает конфигурацию приложения более удобно в чтении и использование. - [Конфигурация приложения](https://csharp.webdelphi.ru/konfiguraciya-prilozheniya/) - Конфигурация приложения Blazor Hybrid представлена парами "ключ-значение". В качестве источников конфигурации могут выступать объекты .NET в памяти или файлы, например, в формате JSON. - [Вызов кода платформы в сервисах Blazor Hybrid](https://csharp.webdelphi.ru/vyzov-koda-platformy-v-servisax-blazor-hybrid/) - В этой части мы разработали сервис, который использует код платформы под которой запускается приложение. Вызов кода платформы в сервисах Blazor Hybrid может осуществляться двумя способами: с использованием условной компиляции и с использованием разделяемых классов и методов. - [Множественная регистрация сервисов в Blazor Hybrid](https://csharp.webdelphi.ru/mnozhestvennaya-registraciya-servisov-v-blazor-hybrid/) - Для множественной регистрации сервисов используются методы AddKeyed[Lificycle](), которые регистрируют сервис с ключом для конкретной реализации. Используя ключи в атрибуте [Inject] мы можем запрашивать такие сервисы через свойства компонентов Razor. - [Жизненный цикл зависимостей в Blazor Hybrid](https://csharp.webdelphi.ru/zhiznennyj-cikl-zavisimostej-v-blazor-hybrid/) - В зависимости от того, какой жизненный цикл предполагается использовать для зависимости (сервиса) выбирается их метод регистрации в ServiceCollection — AddTransient(), AddScoped() или AddSingleton(). Для того, чтобы сервис в приложении Blazor Hybrid был ограничен областью, соответствующей времени жизни компонента Razor, такой компонент должен наследоваться от OwningComponentBase или его наследника - OwningComponentBase. - [Способы получения зависимостей в Blazor Hybrid](https://csharp.webdelphi.ru/sposoby-polucheniya-zavisimostej-v-blazor-hybrid/) - В Blazor Hybrid мы можем использовать внедрение зависимостей через свойство (property injection) с использованием директивы Razor @inject или атрибута [inject], а также через конструктор (constructor injection). - [Внедрение зависимостей в Blazor Hybrid](https://csharp.webdelphi.ru/vnedrenie-zavisimostej-v-blazor-hybrid/) - В этой части мы познакомились с механизмом внедрения зависимостей в приложениях Blazor Hybrid, а также зарегистрировали свой собственный сервис и воспользовались им в компоненте Razor - [Изменение маршрутизации по умолчанию в приложении Blazor Hybrid](https://csharp.webdelphi.ru/izmenenie-marshrutizacii-po-umolchaniyu-v-prilozhenii-blazor-hybrid/) - [Навигация в приложениях Blazor Hybrid](https://csharp.webdelphi.ru/navigaciya-v-prilozheniyax-blazor-hybrid/) - Для навигации в приложении Blazor Hybrid непосредственно из кода C# используется сервис NavigationManager, у которого определен метод NavigateTo(). Чтобы использовать этот сервис в компоненте Razor необходимо использовать директиву @inject для запроса сервиса из контейнера зависимостей. - [Передача данных через строку запроса](https://csharp.webdelphi.ru/peredacha-dannyx-cherez-stroku-zaprosa/) - Передача данных через строку запроса в Blazor может применяться для некоторых типов данных, таких как числа, строки, дата и т.д. Для того, чтобы параметр компонента Razor получал значение из строки запроса, для такого параметра определяется атрибут [SupplyParameterFromQuery]. - [Маршрутизация в приложениях Blazor Hybrid](https://csharp.webdelphi.ru/marshrutizaciya-v-prilozheniyax-blazor-hybrid/) - За выполнение маршрутизации в приложении Blazor отвечает компонент Router. При задании шаблонов маршрутов в компонентах Razor мы можем использовать параметры, значения которых передаются параметрам компонента. Параметры маршрута могут быть необязательными, универсальными, а также содержать различные ограничения. - [Поддержка разделяемых классов в компонентах Razor](https://csharp.webdelphi.ru/podderzhka-razdelyaemyx-klassov-v-komponentax-razor/) - При создании компонентов Razor мы можем использовать разделяемые классы, отделяя тем самый, логику компонента от его визуальной части. Также, в Blazor поддерживается изоляция CSS, благодаря которой мы можем определять собственные стили оформления html-содержимого для конкретного компонента. - [Шаблонные компоненты Razor](https://csharp.webdelphi.ru/shablonnye-komponenty-razor/) - Шаблонные компоненты - это компоненты, которые получают один или несколько шаблонов пользовательского интерфейса в качестве параметров, которые могут использоваться в логике рендеринга компонента. Шаблонные части компонента обычно определяются в виде параметров с типами RenderFragment или RenderFragment. - [Язык C# и .NET](https://csharp.webdelphi.ru/hello-csharp/) - Рассмотрены ключевые особенности платформы .NET и различные реализации .NET, таке как .NET Framework, .NET Core и Mono. - [Виртуализация компонентов Razor](https://csharp.webdelphi.ru/virtualizaciya-komponentov-razor/) - Когда необходимо загрузить и отобразить большой объем однотипных данных, то для повышения производительности приложения можно задействовать виртуализацию с использованием компонента Virtualize. Этот компонент производит рендеринг видимых в данный момент времени компонентов Razor, а также позволяет организовать загрузку данных из источника сегментами, используя специальный делегат. - [Динамические компоненты Razor (DynamicComponent)](https://csharp.webdelphi.ru/dinamicheskie-komponenty-razor-dynamiccomponent/) - Динамические компоненты Razor в разметке представлены компонентами и позволяют отображать обычные компоненты Razor в зависимости от различных факторов, которые трудно или невозможно предугадать заранее. В динамические компоненты можно передавать как обычные параметры, представленные простыми типами или целыми объектами, так и методы обратного вызова для обработки событий в дочерних компонентах. - [Жизненный цикл компонента Razor](https://csharp.webdelphi.ru/zhiznennyj-cikl-komponenta-razor/) - Компоненты Razor имеют четко определенный жизненный цикл, воздействовать на который мы можем переопределением методов жизненного цикла. Порядок выполнение методов от инициализации компонента до его удаления из интерфейса следующий: OnInitialized() —> OnParametersSet() —> OnAfterRender(firstRender = true) —> OnAfterRender(firstRender = false) —> ….. OnAfterRender(firstRender = false). - [Запрет действий по умолчанию](https://csharp.webdelphi.ru/zapret-dejstvij-po-umolchaniyu-2/) - Атрибут @on[event]:preventDefault позволяет запретить выполнение действий по умолчанию в html-элементах, а использование пары @on[event]:preventDefault и @on[event] позволяет полностью изменить поведение элемента при вызове какого-либо события. - [Каскадные значения и параметры](https://csharp.webdelphi.ru/kaskadnye-znacheniya-i-parametry/) - Каскадные значения могут передаваться по всей или части иерархии компонентов Razor. Для передачи каскадного значения по всей иерархии используется метод расширения IServiceCollection AddCascadingValue(). Для передачи каскадного значения по части иерархии компонентов можно воспользоваться компонентом . - [Привязка данных](https://csharp.webdelphi.ru/privyazka-dannyx/) - Для привязки данных в компонентах используется атрибут @bind, для которого могут применяться различные модификаторы. Двухсторонняя привязка должна осуществляться с помощью пары @bind:get/@bind:set, для постобработки данных используется @bind:after, а для форматирования строк - @bind:format. - [Обработка событий компонентов Razor](https://csharp.webdelphi.ru/obrabotka-sobytij-komponentov-razor/) - Для обработки событий компонентов Razor используются типы EventCallback и EventCallback. Типизированный вариант EventCallback используется в том случае, если обработчик события может получать дополнительные аргументы. - [Обработка событий в HTML-элементах](https://csharp.webdelphi.ru/obrabotka-sobytij-v-html-elementax/) - Обработка событий в html-элементах осуществляется с использованием директив атрибутов @on[Event]. В обработчиках событий могут использоваться аргументы событий. Blazor содержит ряд предопределенных аргументов событий. Также, для определения обработчика события не обязательно использовать отдельные методы - мы можем использовать для этих целей лямбда-выражения. - [Передача набора произвольных параметров в компонент Razor](https://csharp.webdelphi.ru/peredacha-nabora-proizvolnyx-parametrov-v-komponent-razor/) - При необходимости, мы можем передавать в компоненты Razor наборы произвольных параметров через директиву @attributes. Набор произвольных параметр должен передаваться в виде словаря объекта, реализующего интерфейс IDictionary, например, как обычный словарь Dictionary. - [Параметры компонентов Razor](https://csharp.webdelphi.ru/parametry-komponentov-razor/) - Параметры компонентов Razor - это публичные автосвойства C# для которых определен атрибут [Parameter]. Компоненты Razor могут быть вложенными, например, мы использовали наш компонент SmartCounter как вложенный для другого компонента - страницы Home. Также в компоненты Razor может передаваться содержимое из родительского компонента. Для этого используется специальный параметр с типом RenderFragment и именем ChildContent. - [Синтаксис Razor](https://csharp.webdelphi.ru/sintaksis-razor/) - В этой части мы рассмотрели основные возможности языка разметки Razor - явные и неявные выражения Razor, блоки кода, комментарии и директивы - [Общие сведения о компонентах Razor](https://csharp.webdelphi.ru/obshhie-svedeniya-o-komponentax-razor/) - Пользовательский интерфейс приложения Blazor Hybrid строится с использованием языка разметки Razor, который позволяет использовать C# внутри разметки html. Используя Razor мы можем создавать компоненты - автономные части пользовательского интерфейса из которых складывается визуальная часть приложения. Маршрутизируемые компоненты Razor (страницы) размещаются внутри макета и содержат необходимые для работы элементы управления, которые также могут выделяться в отдельные компоненты Razor. - [Первое приложение Blazor Hybrid](https://csharp.webdelphi.ru/pervoe-prilozhenie-blazor-hybrid/) - В этой части мы создали наше первое приложение Blazor Hybrid и запустили его в ОС Windows и Android. Теперь, немного ознакомившись со структурой приложения мы можем перейти к более детальному изучению Blazor Hybrid. - [Blazor Hybrid. Введение](https://csharp.webdelphi.ru/blazor-hybrid-vvedenie/) - Blazor Hybrid позволяет создавать кроссплатформенные приложения под Android, iOS, macOS и Windows, используя для построения интерфейса HTML и CSS. При этом, приложения Blazor Hybrid имеют полный доступ к возможностям той операционной системе в которой они работают. - [Создание собственного провайдера конфигурации и его использование](https://csharp.webdelphi.ru/sozdanie-sobstvennogo-provajdera-konfiguracii-i-ego-ispolzovanie/) - Чтобы создать свой провайдер конфигурации нам необходимо: разработать класс-наследник ConfigurationProvider — сам провайдер конфигурации, разработать класс, реализующий интерфейс IConfigurationSource, который будет определять источник конфигурации, разработать метод расширения для добавления нового провайдера конфигурации в приложение. - [Документирование API. Основы Swagger](https://csharp.webdelphi.ru/dokumentirovanie-api-osnovy-swagger/) - Для документирования API в ASP.NET Core мы можем использовать инструмент Swagger, который умеет работать с документацией в коде приложения. При необходимости, мы можем настроить Swagger UI для работы с методами, для которых требуется авторизация, например, с использованием JWT-токенов. - [Согласование содержимого. Собственные форматировщики](https://csharp.webdelphi.ru/soglasovanie-soderzhimogo-sobstvennye-formatirovshhiki/) - При необходимости, мы можем в наше приложение свои форматировщики данных и, тем самым, позволить нашему приложению как сериализовать данные в новый формат, так и десериализовать данные из запроса пользователя в новый формат. - [Согласование содержимого. Введение](https://csharp.webdelphi.ru/soglasovanie-soderzhimogo-vvedenie/) - Для согласования содержимого используется заголовок клиента Accept в котором клиент перечисляет принимаемые им форматы данных. В ASP.NET Core Web API мы можем добавлять различные форматировщики для формирования ответа, а также настраивать их. По умолчанию, ASP.NET Core Web API отклоняет заголовки Accept от браузеров. - [CORS](https://csharp.webdelphi.ru/cors/) - CORS (Cross-origin resource sharing — «совместное использование ресурсов между разными источниками») — это технология современных браузеров, которая позволяет предоставить веб-страницам доступ к ресурсам другого домена. По умолчанию веб-браузеры в целях безопасности ограничивают ajax-запросы между различными доменами. Для настройки CORS в нашем приложении ASP.NET Core Web API необходимо подключить сервис для работы с CORS, а также подключить в конвейер обработки запросов новый компонент middleware для работы CORS. - [Сжатие ответов](https://csharp.webdelphi.ru/szhatie-otvetov/) - Для ускорения передачи данных по Сети мы можем использовать сжатие ответов (совместно с кэшированием или без него). Для того, чтобы сжатие ответов работало, мы должны подключить сервис сжатия и обязательно его настроить на сжатие при передаче данных по HTTPS, если этот протокол используется в вашем приложении. - [HTTP-кэширование. Кэширование выходных данных (output caching)](https://csharp.webdelphi.ru/http-keshirovanie-keshirovanie-vyxodnyx-dannyx-output-caching/) - Кэширование выходных данных позволяет кэшировать данные действий контроллеров и, при этом, настраивается на сервере, что позволяет поместить элемент в кэш даже, если ваш API используется в браузере и браузер отправляет заголовки на получение наиболее свежих результатов. Более того, используя кэширование выходных данных, мы имеем возможность управлять элементами кэша, присваивая им метки, а также изменять расположение кэша. - [HTTP-кэширование. Кэширование ответов (response caching)](https://csharp.webdelphi.ru/http-keshirovanie-keshirovanie-otvetov-response-caching/) - HTTP-кэширование (веб-кэширование), как и кэширование данных, является способом повышения производительности приложений. При этом управление HTTP-кэшированием ресурсов осуществляется с помощью заголовков запросов. Одним из способов использования HTTP-кэширования в ASP.NET Core является использования кэширования ответов, которое осуществляется с использованием атрибута ResponseCache и сервисов кэширования ответов - [Распределенное кэширование (Distributed Cache)](https://csharp.webdelphi.ru/raspredelennoe-keshirovanie-distributed-cache/) - В этой части мы в общих чертах рассмотрели использование распределенного кэша с использованием Redis. Распределенный кэш имеет меньше настроек, чем кэш в памяти, однако его преимущество заключается в том, что такой кэш может использоваться на нескольких компьютерах одновременно. - [Кэширование в памяти (In-Memory Cache)](https://csharp.webdelphi.ru/keshirovanie-v-pamyati-in-memory-cache/) - Кэширование в памяти позволяет размещать любые объекты в оперативной памяти и повторно их использовать. Для того, чтобы ограничить объем оперативной памяти для хранения элементов кэша, а также сделать использование кэша более эффективным, мы можем использовать различные настройки политик кэширования используя классы MemoryCacheOptions и MemoryCacheEntryOptions. - [Централизованная обработка ошибок. Интерфейс IExceptionHandler](https://csharp.webdelphi.ru/centralizovannaya-obrabotka-oshibok-interfejs-iexceptionhandler/) - Таким образом, используя различные обработчики IExceptionHandler, мы можем организовать централизованную обработку различных ошибок, фактически, выстраивая, если можно так выразиться, свой собственный конвейер обработки ошибок в приложении. - [Централизованная обработка ошибок. Метод расширения UseExceptionHandler()](https://csharp.webdelphi.ru/centralizovannaya-obrabotka-oshibok-metod-rasshireniya-useexceptionhandler/) - Для того, чтобы приложение ASP.NET Core Web API обрабатывало все исключительные ситуации, возникающие при запросах пользователей, в одном централизованном месте мы можем использовать метод расширения UseExceptionHandler(), определив в его параметрах терминальный компонент middleware для выдачи сообщения об ошибке пользователю. Вызов UseExceptionHandler() должен находиться как можно ближе к началу конвейера обработки запросов. - [Авторизация пользователей с использованием политик](https://csharp.webdelphi.ru/avtorizaciya-polzovatelej-s-ispolzovaniem-politik/) - Политика авторизации - это набор критериев, включая роли, которым должен соответствовать пользователь, чтобы получить доступ к ресурсу. В ASP.NET Core Web API мы можем создавать собственные политики авторизации, настраивать их с использованием уже готовых или же собственных ограничений авторизации. - [Авторизация пользователей по ролям](https://csharp.webdelphi.ru/avtorizaciya-polzovatelej-po-rolyam/) - Для включения механизмов авторизации в приложении ASP.NET Core Web API используется специальный атрибут для [Authorize], применяемый к действиям контроллера или классу контроллера полностью. Авторизация пользователей по ролям - один из популярных способов авторизации, при котором один пользователь может принадлежать к одной или нескольким ролям и, в зависимости от этого, производится его авторизация в системе. - [Аутентификации пользователя на основе JWT-токена](https://csharp.webdelphi.ru/autentifikacii-polzovatelya-na-osnove-jwt-tokena/) - В этой части мы научились проводить аутентификацию пользователя с использованием JWT-токенов. JWT-токен состоит из трех частей - заголовка, полезной нагрузки и подписи и представляет собой компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON . - [ASP.NET Core Identity](https://csharp.webdelphi.ru/asp-net-core-identity/) - В этой части мы познакомились в общих чертах с ASP.NET Core Identity и подготовили приложение в котором мы можем зарегистрировать нового пользователя. - [Обновление JWT-токена](https://csharp.webdelphi.ru/obnovlenie-jwt-tokena/) - В этой части мы реализовали самую простую схему обновления JWT-токена для пользователя. Для обновления используется специальный RefreshToken, который пользователь "обменивает" на товый токен доступа. - [ASP.NET Core Web API. Контроллеры](https://csharp.webdelphi.ru/asp-net-core-web-api-kontrollery/) - Контроллером в проектах ASP.NET Core Web API считается класс, который содержит один или несколько признаков: содержит в названии суффикс Controller, для класса определен атрибут [ApiController], наследуется от класса ControllerBase или, реже, от Controller. - [Валидация модели. Свойство контроллера ModelState](https://csharp.webdelphi.ru/validaciya-modeli-svojstvo-kontrollera-modelstate/) - Автоматический отклик на ошибки с кодом 400 Bad Request в контроллерах с атрибутом [ApiController] избавляет нас от лишней рутинной работы по формированию ответа, соответствующего RFC 7807. Однако, при желании, мы можем отключать такой отклик в приложении и формировать сообщения об ошибках самостоятельно, используя свойство контроллера ModelState, если класс контроллера является наследником от ControllerBase. - [Валидация модели. Атрибуты валидации](https://csharp.webdelphi.ru/validaciya-modeli-atributy-validacii/) - Мы рассмотрели основные моменты валидации модели в ASP.NET Core Web API с использованием атрибутов валидации. На этом тема валидации модели в ASP.NET Core не заканчивается и в следующей части мы рассмотрим вопросы валидации модели, касающиеся непосредственно ASP.NET Core Web API. - [Использование параметров запроса для привязки модели. Фильтрация результатов (передача массивов)](https://csharp.webdelphi.ru/ispolzovanie-parametrov-zaprosa-dlya-privyazki-modeli-filtraciya-rezultatov-peredacha-massivov/) - В этой части мы на практике использовали передачу массивов через параметры запроса. - [Использование параметров запроса для привязки модели. Постраничный вывод результатов](https://csharp.webdelphi.ru/ispolzovanie-parametrov-zaprosa-dlya-privyazki-modeli-postranichnyj-vyvod-rezultatov/) - В этой части мы научились организовывать постраничную выдачу результатов запросов, используя параметры запроса. Показанный выше пример, конечно, может дорабатываться в зависимости от ваших потребностей, однако он дает представление о том, какую пользу можно извлечь из работы с параметрами запроса и то, как мы можем на практике воспользоваться передачей целых объектов через параметры запроса. - [Контроллеры Web API. Передача данных в контроллер через параметры запроса](https://csharp.webdelphi.ru/kontrollery-web-api-peredacha-dannyx-v-kontroller-cherez-parametry-zaprosa/) - Используя параметры запроса, мы можем передавать в контроллеры Web API как простые типы, так и сложные - такие как объекты, словари, массивы и т.д. Параметры запроса можно использовать в приложениях Web API, например, для указания серверу параметров фильтрации и сортировки данных. - [Модели Web API. Привязка модели в контроллерах API](https://csharp.webdelphi.ru/modeli-web-api-privyazka-modeli-v-kontrollerax-api/) - [ASP.NET Core Web API. Типы значений, возвращаемые контроллерами](https://csharp.webdelphi.ru/asp-net-core-web-api-tipy-znachenij-vozvrashhaemye-kontrollerami/) - Контроллеры в ASP.NET Core Web API могт возвращать значения различных типов - от примитивных типов и конкретных объектов до объектов, реализующих специальные интерфейсы типа IResult и IActionResult. Использование того или иного типа данных зависит, в первую очередь, от задач, решаемых API - [Контроллеры ASP.NET Core Web API. Параметры и ограничения маршрутов](https://csharp.webdelphi.ru/kontrollery-asp-net-core-web-api-parametry-i-ogranicheniya-marshrutov/) - При разработке системы маршрутизации в проекте мы можем использовать в шаблонах маршрутов параметры, которые включаются в шаблон маршрута в фигурных скобках. Для разрешения неоднозначных маршрутов в ASP.NET Core применяются ограничения маршрутов, которые указываются через двоеточие после имени параметра - [Контроллеры ASP.NET Core Web API. Маршрутизация с использованием атрибутов HTTP-команд](https://csharp.webdelphi.ru/kontrollery-asp-net-core-web-api-marshrutizaciya-s-ispolzovaniem-atributov-http-komand/) - Помимо атрибута Route, мы также можем организовать систему маршрутизации к действиям контроллеров в приложениях ASP.NET Core Web API и с помощью атрибутов http-команд - [Контроллеры ASP.NET Core Web API. Маршрутизация с использованием атрибута Route](https://csharp.webdelphi.ru/kontrollery-asp-net-core-web-api-marshrutizaciya-s-ispolzovaniem-atributa-route/) - Для настройки маршрутов использовался атрибут Route, который может применяться как к классам, так и отдельным методам (действиям) контроллера многократно. Приложения ASP.NET Core Web API используют маршрутизацию на основе атрибутов, поэтому для каждого действия контроллера указывается своя уникальная пара значений "путь/http-метод". - [Создание собственного провайдера ведения журнала](https://csharp.webdelphi.ru/sozdanie-sobstvennogo-provajdera-vedeniya-zhurnala/) - Для создания своего собственного провайдера нам потребуется выполнить три действия: создать класс, реализующий интерфейс ILogger – этот класс используется непосредственно для записи очередного сообщения в источник (вывод в консоль, запись в журнал событий Windows и т.д.), создать класс, реализующий интерфейс ILoggerProvider – непосредственно сам провайдер ведения журнала, создать метод расширения для добавления нового провайдера в приложения (этот пункт не обязательный, но рекомендуемый) - [Фильтры логов](https://csharp.webdelphi.ru/filtry-logov/) - Для программной настройки ведения логов в приложении ASP.NET Core могут использоваться различные фильтры. Фильтры логов устанавливаются при использовании метода AddFilter() где в качестве универсального параметра T выступает класс провайдера ведения лога. - [Провайдеры ведения журнала в ASP.NET Core](https://csharp.webdelphi.ru/provajdery-vedeniya-zhurnala-v-asp-net-core/) - При необходимости, мы можем указывать в приложении ASP.NET Core только те провайдеры ведения логов, которые нам необходимы. Провайдер Console может выводить сообщения в одну строку, с цветовым оформлением или без него, а также в форматах JSON и systemd. - [Конфигурация ведения журналов в ASP.NET Core](https://csharp.webdelphi.ru/konfiguraciya-vedeniya-zhurnalov-v-asp-net-core/) - Конфигурация ведения журналов указывается, обычно, в файлах конфигурации appsettings.json (хотя, мы можем использовать и свои файлы конфигурации). В конфигурации мы можем указать минимальный уровень сообщений, которые будут транслироваться в лог. При этом, для провайдера логирования EventLog мы должны явно указывать конфигурацию. - [Общие сведения о ведении журналов в ASP.NET Core. Интерфейсы ILogger и ILogger](https://csharp.webdelphi.ru/obshhie-svedeniya-o-vedenii-zhurnalov-v-asp-net-core-interfejsy-ilogger-i-ilogger/) - Ведение журналов в ASP.NET Core осуществляется с использованием сервиса ILogger. Вызывая методы ILogger или его наследника ILogger мы производим запись сообщения сразу во все зарегистрированные источники, используя провайдеры логирования (консоль, окно Debug и т.д.) - [Проекция конфигурации на классы](https://csharp.webdelphi.ru/proekciya-konfiguracii-na-klassy/) - При необходимости, мы можем проецировать конфигурацию на обычные классы C#. Для проецирования конфигурации на классы используются два метода - универсальный метод Get() и метод Bind(). Первый метод возвращает готовый к использованию объект, второй - требует предварительного создания объекта, на который будут проецироваться настройки из конфигурации. - [Работа с консолью в C# (класс Console)](https://csharp.webdelphi.ru/rabota-s-konsolyu-v-c-klass-console/) - Рассматриваем работу с консолью в C#: операции ввода и вывода данных Read, ReadLine и ReadKey, - [Универсальный список List](https://csharp.webdelphi.ru/universalnyj-spisok-list/) - Рассмотрели основные моменты по работе со списком List в C#, научились создавать список, выводить значения из списка в консоль, а также разобрались с тем, зачем нам необходимо свойство Capacity и как его использовать. - [Общая система типов в .NET (Common Type System, CTS)](https://csharp.webdelphi.ru/obshhaya-sistema-tipov-v-net-common-type-system-cts/) - Общая система типов в .NET (Common Type System, CTS), - [Секреты пользователей](https://csharp.webdelphi.ru/sekrety-polzovatelej/) - Для использования в приложении ASP.NET Core Web API конфиденциальных данных (паролей, строк подключения и т.д.) рекомендуется использование секретов пользователей. Файл секретов пользователя - это обычный json-файл, который создается отдельно от проекта и не разворачивается вместе с приложением. - [Нефайловые провайдеры конфигурации](https://csharp.webdelphi.ru/nefajlovye-provajdery-konfiguracii/) - В качестве нефайловых источников конфигурации мы можем использовать объекты в памяти, аргументы командной строки или же переменные среды. Для тестирования конфигурации в Visual Studio с использованием нефайловых провайдеров удобно использовать файл launchSettings.json в котором можно определить необходимую конфигурацию приложения. - [Файловые провайдеры конфигурации](https://csharp.webdelphi.ru/fajlovye-provajdery-konfiguracii/) - Файловые провайдеры позволяют создавать конфигурации с разветвленной структурой, помещая отдельные настройки в секции и подсекции. Для конфигурации приложения мы можем использовать json-файлы, xml-файлы и ini-файлы. Конфигурацию приложения можно разносить по нескольким файлам. При этом, настройки с одинаковыми именами ключей перезаписываются последним прочитанным значением. - [Общие сведения о конфигурации (интерфейсы IConfiguration и IConfigurationBuilder)](https://csharp.webdelphi.ru/obshhie-svedeniya-o-konfiguracii-interfejsy-iconfiguration-i-iconfigurationbuilder/) - Для конфигурации приложения ASP.NET Core Web API могут использоваться различные источники, такие как файлы, аргументы командной строки, объекты .NET в памяти и так далее. В любом случае, какой бы источник конфигурации не использовался, для нас все настройки приложения будут представлять из себя пары "ключ - значение", которые мы можем получить, используя интерфейс IConfiguration. В свою очередь, добавление новых источников конфигурации производится с использованием методов расширения IConfigurationBuilder. - [ASP.NET Core Web API. Dependency Injection](https://csharp.webdelphi.ru/asp-net-core-web-api-dependency-injection/) - Механизм Dependency Injection позволяет сделать взаимодействующие в приложении объекты слабосвязанными. Обычно, в качестве типа сервиса выступает интерфейс, который реализуется классами - реализациями сервиса (или по другому - зависимости) - [Класс WebApplicationBuilder. Настройка приложения](https://csharp.webdelphi.ru/klass-webapplicationbuilder-nastrojka-prilozheniya/) - используя WebApplicationBuilder мы можем настраивать веб-сервера, использовать имя среду выполнения для начальной настройки приложения, а также выполнять ряд других важных операций - [ASP.NET Core Web API. Работа с запросом пользователя (объект HttpRequest)](https://csharp.webdelphi.ru/asp-net-core-web-api-rabota-s-zaprosom-polzovatelya-obekt-httprequest/) - Свойство Request представляет собой объект типа HttpRequest, который содержит исчерпывающую информацию о запросе пользователя. - [ASP.NET Core Web API. RequestDelegate и контекст запроса](https://csharp.webdelphi.ru/asp-net-core-web-api-requestdelegate-i-kontekst-zaprosa/) - Для построения конвейера обработки запросов используется делегат RequestDelegate, который в качестве параметра принимает контекст запроса, представленный объектом типа HttpContext. - [ASP.NET Core Web API. Конвейер обработки запросов и middleware](https://csharp.webdelphi.ru/asp-net-core-web-api-konvejer-obrabotki-zaprosov-i-middleware/) - В ASP.NET Core обработка запроса пользователя осуществляется по принципу конвейера. Конвейер обработки запросов состоит из компонентов middleware (ПО промежуточного слоя), которые создаются один раз при создании приложения и выстраиваются в конвейере в определенном порядке от которого зависит работа приложения. - [Класс WebApplication. Запуск и остановка приложения, доступ к событиям жизненного цикла приложения](https://csharp.webdelphi.ru/klass-webapplication-zapusk-i-ostanovka-prilozheniya-dostup-k-sobytiyam-zhiznennogo-cikla-prilozheniya/) - Класс WebApplication используется для широкого круга задач. В этой части мы рассмотрели различные варианты запуска приложения, а также работу со свойством Lifetime, используя которое, мы можем получить доступ к событиям жизненного цикла приложения. - [Файл Program.cs проекта ASP.NET Core Web API](https://csharp.webdelphi.ru/fajl-program-cs-proekta-asp-net-core-web-api/) - В файле Program.cs выполняются две важные задачи - добавляются необходимые для работы приложения сервисы и настраивается конвейер обработки запросов. При этом, важнейшими, с этой точки зрения, классами приложения являются WebApplicationBuilder и WebApplication. - [Тестирование Web API. Использование http-файлов Visual Studio](https://csharp.webdelphi.ru/testirovanie-web-api-ispolzovanie-http-fajlov-visual-studio/) - http-файлы - это достаточно удобный и, главное, встроенный в Visual Studio инструмент для тестирования запросов к API - [Файл launchSettings.json. Настройка профилей запуска приложения](https://csharp.webdelphi.ru/fajl-launchsettings-json-nastrojka-profilej-zapuska-prilozheniya/) - В этой части мы разобрали основные свойства файла launchSettings.json, а также научились настраивать профили запуска нашего приложения. Файл launchSettings.json не разворачивается вместе с приложением и используется только для целей разработки - [Работа приложения ASP.NET Core. Веб-сервер Kestrel](https://csharp.webdelphi.ru/rabota-prilozheniya-asp-net-core-veb-server-kestrel/) - Приложение ASP.NET Core запускается с внутрипроцессорной реализацией web-сервера. По умолчанию, в ASP.NET Core используется кроссплатформенный веб-сервер Kestrel. - [ASP.NET Core Web API. Первое приложение в Visual Studio](https://csharp.webdelphi.ru/asp-net-core-web-api-pervoe-prilozhenie-v-visual-studio/) - Структура проекта ASP.NET Core 9 Web API, запуск приложение, тестирование запроса - [ASP.NET Core Web API. Введение в Web API](https://csharp.webdelphi.ru/asp-net-core-web-api-vvedenie-v-web-api/) - Программный интерфейс (API) - это набор правил взаимодействия между приложениями или частями одного приложения между собой. ASP.NET Core предоставляет два подхода к построению API - минимальные API и API на основе контроллеров. - [Параметры и свойства компонентов Blazor](https://csharp.webdelphi.ru/parametry-i-svojstva-komponentov-blazor/) - Свойства компонентов Blazor, а также передавать содержимое из родительского компонента в дочерний. Для определения свойств компонента мы можем использовать атрибуты элемента - [Конфигурация в ASP.NET Core. Нефайловые провайдеры конфигурации. Переменные среды окружения](https://csharp.webdelphi.ru/konfiguraciya-v-asp-net-core-nefajlovye-provajdery-konfiguracii-peremennye-sredy-okruzheniya/) - Конфигурация в ASP.NET Core. Нефайловые провайдеры конфигурации. Переменные среды окружения - [Конфигурация в ASP.NET Core. Создание собственного провайдера конфигурации ASP.NET Core](https://csharp.webdelphi.ru/konfiguraciya-v-asp-net-core-sozdanie-sobstvennogo-provajdera-konfiguracii-asp-net-core/) - Конфигурация в ASP.NET Core. Создание собственного провайдера конфигурации ASP.NET Core - [Маршрутизация в ASP.NET Core. Параметры маршрутов](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-parametry-marshrutov/) - Маршрутизация в ASP.NET Core. Параметры маршрутов - [Parallel LINQ (PLINQ) в C#. Параметры слияния в PLINQ (методы WithMergeOptions и ForAll)](https://csharp.webdelphi.ru/parallel-linq-plinq-v-c-parametry-sliyaniya-v-plinq-metody-withmergeoptions-i-forall/) - Parallel LINQ (PLINQ) в C#. Параметры слияния в PLINQ (методы WithMergeOptions и ForAll) - [А ведь сегодня домену webdelphi.ru 15 лет](https://csharp.webdelphi.ru/a-ved-segodnya-domenu-webdelphi-ru-15-let/) - домену webdelphi.ru 15 лет - [Статические классы Results и TypedResults в ASP.NET Core. Переадресация](https://csharp.webdelphi.ru/staticheskie-klassy-results-i-typedresults-v-asp-net-core-pereadresaciya/) - [ASP.NET Core Web API. Способы получения сервисов](https://csharp.webdelphi.ru/asp-net-core-web-api-sposoby-polucheniya-servisov/) - ASP.NET Core Web API. Способы получения сервисов - [Аутентификация и авторизация в ASP.NET Core MVC. Базовые классы ASP.NET Core Identity](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-bazovye-klassy-asp-net-core-identity/) - ASP.NET Core Identity: основные классы - [LINQ в C#: преобразование типов данных](https://csharp.webdelphi.ru/operacii-preobrazovania-v-linq/) - Методы преобразования типов данных в LINQ позволяют, при необходимости, скрывать конкретную реализацию коллекции или преобразовать коллекцию одного типа, например, List в коллекцию другого типа, например, Array. - [Контроллеры ASP.NET Core MVC. Отправка файлов клиенту](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-otpravka-fajlov-klientu/) - Для отправки файла клиенту мы можем воспользоваться различными версиями метода File(), используя для отправки как массивы байтов, так и потоки (Stream). Также, мы может отправлять файлы, используя виртуальный путь к файлу (по умолчанию, это путь относительно папки wwwroot проекта) или физический путь. При использовании физического пути к файлу мы должны использовать метод PhysicalFile(). - [Ветвление конвейера с использованием методов MapWhen и UseWhen](https://csharp.webdelphi.ru/vetvlenie-konvejera-s-ispolzovaniem-metodov-mapwhen-i-usewhen/) - Сегодня мы рассмотрели ещё два метода, позволяющих осуществить ветвление конвейера запросов - MapWhen() и UseWhen(). Оба этих метода работают практически идентично - на основании заданного условия создают новую ветку конвейера. При этом, ветка, создаваемая с использованием UseWhen() может объединяться с основной - [Лабораторная работа по C#. Работа с одномерными массивами](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-rabota-s-odnomernymi-massivami/) - В этой лабораторной работе мы использовали навыки работы с логическими операторами, массивами, файлами. Как и любая другая хорошая лабораторная работа по C# - эта лабораторная работа содержит в себе достаточно много путей улучшения приложения - [Отправка ответа клиенту. Работа с HttpResponse.](https://csharp.webdelphi.ru/otpravka-otveta-klientu-rabota-s-httpresponse/) - Формирование ответов клиенту: отправка клиенту заголовков и кодов статуса, запись тела ответа как в обычном текстовом формате и html, ответ в формате JSON. - [Правила обнаружения конструктора](https://csharp.webdelphi.ru/pravila-obnaruzheniya-konstruktora/) - Если класс, реализующий сервис, содержит несколько открытых конструкторов с различным количеством параметров, то для создания объекта выбирается тот конструктор, который имеет наибольшее число параметров, которые могут быть разрешены с использованием механизма внедрения зависимостей. При создании таких классов следует избегать создания конструкторов с равным количеством параметров, которые могут быть разрешены с использованием контейнера DI - это приводит к неоднозначности при определении необходимого конструктора. которая выливается в ошибку на этапе работы приложения. - [Множественная регистрация сервисов](https://csharp.webdelphi.ru/mnozhestvennaya-registraciya-servisov/) - Начиная с версии .NET 8 мы можем регистрировать сервисы с ключами, что позволяет нам обеспечить множественную регистрацию сервисов - когда на один сервис в приложении используется несколько его реализаций. Для указания того, какая реализация сервиса нам необходима, мы можем использовать ключ сервиса, указав его, например, в специальном атрибуте [FromKeyedServices]. - [Жизненный цикл зависимостей (работа с ServiceCollection)](https://csharp.webdelphi.ru/zhiznennyj-cikl-zavisimostej-rabota-s-servicecollection/) - Сервисы в .NET могут иметь три типа жизненных циклов: Transient (временные) - реализация такого сервиса создается при каждом его запросе у провайдера; Scoped (ограниченный) - сервисы с таким жизненным циклом существуют в рамках определенной области (scope) и Singleton (одноэлементные) - объект сервиса создается один раз (при первом запросе) и существует до окончания работы приложения. В зависимости от того, какой жизненный цикл предполагается использовать для зависимости (сервиса) выбирается их метод регистрации в ServiceCollection - AddTransient(), AddScoped() или AddSingleton(). - [Введение в сервисы](https://csharp.webdelphi.ru/vvedenie-v-servisy/) - Сегодня мы рассмотрели пример Dependency Injection с использованием средств, доступных в .NET. Для использования механизмов DI мы должны создать коллекцию сервисов (ServiceCollection) и добавить в ней необходимые для работы приложения сервисы, создать провайдер сервисов (IServiceProvider) и запросить необходимый сервис, используя методы провайдера. Провайдер сервисов самостоятельно разрешит все зависимости в приложении и вернет нам готовый к работе сервис. - [Dependency Injection в .NET/C#](https://csharp.webdelphi.ru/dependency-injection-v-net-c/) - Dependency Injection (DI, внедрение зависимостей) - это набор принципов и паттернов проектирования программных продуктов, позволяющий разрабатывать слабосвязанный код. В этой части мы рассмотрели простейший пример DI без каких-либо дополнительных библиотек. Этот пример демонстрирует пример написания слабосвязанного кода при котором мы можем менять одну часть приложения на другую без вмешательства в остальные части системы. - [Многопоточность в C#. Способы синхронизации потоков](https://csharp.webdelphi.ru/mnogopotochnost-v-c-sposoby-sinxronizacii-potokov/) - В статье рассматриваются различные способы синхронизации потоков (Thread) в .NET - использование монитора (Monitor), мьютекса (Mutex) и семафора (Semaphore) - [Многопоточность в C#. Конкурентный доступ и синхронизация](https://csharp.webdelphi.ru/mnogopotochnost-v-c-konkurentnyj-dostup-i-sinxronizaciya/) - Сегодня мы познакомились с тем, как можно организовать синхронизацию нескольких потоков в приложении с использованием оператора lock - [Многопоточность в C#. Делегаты потоков](https://csharp.webdelphi.ru/mnogopotochnost-v-c-delegaty-potokov/) - Мы рассмотрели два делегата, используемых при создании потоков в C# - ThreadStart и ParameterizedThreadStart . Использование делегата ParameterizedThreadStart хоть и позволяет передавать в поток какую-либо информацию, однако использование этого делегата может быть сопряжено с проблемами безопасности, так как в поток может передаваться любое значение типа object. - [Многопоточность в C#. Введение](https://csharp.webdelphi.ru/mnogopotochnost-v-c-vvedenie/) - Сегодня мы рассмотрели основные свойства класса Thread и написали небольшое приложение, демонстрирующее работу двух потоков в приложении - [Рефлексия (отражение) в C#. Введение](https://csharp.webdelphi.ru/refleksiya-otrazhenie-v-c-vvedenie/) - Рассматриваем основы рефлексии (reflection, отражения) в C#: что такое рефлексия в C#, как получить имя и версию сборки, как получить тип Type - [Работа с датой и временем в C# (DateTime)](https://csharp.webdelphi.ru/rabota-s-datoj-i-vremenem-v-c-datetime/) - DateTime - структура C# для работы с датой и временем. Изучаем основные моменты по работе с дотой и временем в C - [Работа с регулярными выражениями в C# (класс Regex)](https://csharp.webdelphi.ru/rabota-s-regulyarnymi-vyrazheniyami-v-c/) - регулярные выражения - это текстовые шаблоны с помощью которых производится поиск и замена текста. - [Класс StringBuilder для работы со строками в C#](https://csharp.webdelphi.ru/klass-stringbuilder-dlya-raboty-so-strokami-v-c/) - Рассматриваем работу с классом StringBuilder C#. StringBuilder - это класс, представляющие изменяемую строку C#, в отличие от string - [Строки в C#: форматирование и интерполяция строк](https://csharp.webdelphi.ru/stroki-v-c-formatirovanie-i-interpolyaciya-strok/) - В статье рассматриваются основные моменты форматирования и интерполяции строк в C#. Как форматировать числа, проценты, валюту в C#, что такое интерполяция строк C# - [Строки в C#: введение в работу со строками](https://csharp.webdelphi.ru/stroki-v-c-vvedenie-v-rabotu-so-strokami/) - как создавать строки в C#, как использовать различные escape-последовательности в строках, а также использовать буквальный литерал для повышения читабельности строк в C#. Также рассмотрели некоторые моменты, касающиеся неизменности строк в C# - [Записи (record) в C#](https://csharp.webdelphi.ru/zapisi-record-v-c/) - Начиная с C# 9 появилась возможность создания нового ссылочного типа - записи (record). Такие типы данных позволяют сравнивать объекты между собой не по ссылкам (как обычно), а по значениям свойств для чего при определении record компилятор автоматически добавляет необходимые методы и переопределяет операторы равенства в типе. Так же, начиная с C# 10 мы получили возможность создания record-структур, включая структуры только для чтения. - [Кортежи](https://csharp.webdelphi.ru/kortezhi/) - Кортежи - это компактный и лаконичный способ объединения различных данных в единую структуру. В отличие от классов, внутри кортежей нельзя объявлять свойства и методы и так далее, однако это и не требуется в том случае, если нам достаточно просто получить/передать единую структуру с различными данными. - [Явная реализация интерфейса и реализация по умолчанию](https://csharp.webdelphi.ru/yavnaya-realizaciya-interfejsa-i-realizaciya-po-umolchaniyu/) - Явная реализация интерфейса — это член класса, который вызывается только через указанный интерфейс. Использование явной реализации позволяет использовать члены различных интерфейсов, имеющих одну и ту же сигнатуру. Начиная с C# 8.0 можно создавать реализации по умолчанию различных членов интерфейса непосредственно в самом интерфейсе. Класс, реализующий такой интерфейс не должен реализовывать член интерфейса с реализацией по умолчанию. - [Наследование и множественная реализация интерфейсов](https://csharp.webdelphi.ru/nasledovanie-i-mnozhestvennaya-realizaciya-interfejsov/) - В C# допускается наследование одного интерфейса от другого, при этом класс, реализующий производный интерфейс должен реализовывать все члены этого интерфейса, включая методы, свойства и т.д. интерфейса-предка. Также в C# допускается множественная реализация интерфейсов - один класс может реализовать сразу несколько интерфейсов. - [Интерфейсы в C#](https://csharp.webdelphi.ru/interfejsy-v-c/) - Что такое интерфейс в C#, как объявлять и реализовывать интерфейсы в C#, как получить доступ к методам интерфейса C# - [Стандартные делегаты: Action, Predicate, Func](https://csharp.webdelphi.ru/standartnye-delegaty-action-predicate-func/) - В .NET определен ряд стандартных делегатов, которые мы можем использовать при разработке своих приложений - это делегаты Action, Predicate и Func. Делегаты Action и Func могут принимать от ноля до шестнадцати параметров. Стандартные делегаты активно используются в различных библиотеках C#. Как мы увидим далее, такие делегаты нашли широкое применение в таком механизме как LINQ. - [Лямбда-выражения](https://csharp.webdelphi.ru/lyambda-vyrazheniya/) - Лямбда-выражения представляют собой более лаконичный способ создания анонимных методов. Лямбда-выражения могут использовать параметры, возвращать результат, а также сами выступать в качестве результата выполнения какой-либо операции. - [Анонимные методы](https://csharp.webdelphi.ru/anonimnye-metody/) - Анонимный метод - это метод, не имеющий имени. Такие методы не могут существовать сами по себе, однако могут преобразовываться в тип делегата. Анонимный метод без параметров соответствует любому типы делегата, в то время как, анонимный метод с параметрами должен полностью соответствовать типу делегата. - [Делегаты в C#](https://csharp.webdelphi.ru/delegaty-v-c/) - Что из себя представляют делегаты в C#, учимся создавать переменные типа делегата и вызывать методы с использованием делегатов в C# - [Методы расширения](https://csharp.webdelphi.ru/metody-rasshireniya/) - Методы расширения C#: пример метода расширения, создание собственного метода расширения, ограничения методов расширения - [Создание собственных классов исключений в C#](https://csharp.webdelphi.ru/sozdanie-sobstvennyx-klassov-isklyuchenij-v-c/) - Изучаем то, как создать собственный класс исключений в C#, какие преимущества дают собственные классы исключений в C# - [Как генерировать исключения в C# (оператор throw)](https://csharp.webdelphi.ru/kak-generirovat-isklyucheniya-v-c-operator-throw/) - Рассматриваем вопрос о том как генерировать исключения в C# с использованием оператора throw. - [Класс Exception и его свойства. Наиболее частые виды исключений в C#](https://csharp.webdelphi.ru/klass-exception-i-ego-svojstva-naibolee-chastye-vidy-isklyuchenij-v-c/) - Exception - базовый класс всех типов исключений в C#. Рассматриваем основные свойства класса Exception и наиболее часто встречающиеся типы исключений в C# - [Обработка исключений в C#](https://csharp.webdelphi.ru/obrabotka-isklyuchenij-v-c/) - Рассматриваем вопросы перехвата и обработки исключений в C# с использованием конструкции try...catch...fianlly на примере исключений типа DivideByZeroException и OverflowException. - [Классы и объекты C#: класс System.Object](https://csharp.webdelphi.ru/klassy-i-obekty-c-klass-system-object/) - В статье рассматриваются основные методы класса Object C#. Рассмотрены различия в реализации методов Equals() и ReferenceEquals() и вопросы использования этих методов в C# - [Классы и объекты C#: индексаторы](https://csharp.webdelphi.ru/klassy-i-obekty-c-indeksatory/) - Рассматривается работа с индексаторами C#. Индексаторы C# очень похожи на свойства классов, но при этом не имеют своего имени (в отличие от свойств класса) - [Классы и объекты C#: сокрытие методов и свойств](https://csharp.webdelphi.ru/klassy-i-obekty-c-sokrytie-metodov-i-svojstv/) - В статье рассматривается механизм сокрытия (hiding/shadowing) методов и свойств в C#, а также различия в переопределении и сокрытие методов C# - [Классы и объекты C#: перегрузка операторов и операций преобразования типов](https://csharp.webdelphi.ru/klassy-i-obekty-c-peregruzka-operatorov-i-operacij-preobrazovaniya-tipov/) - В статье рассматриваются примеры перегрузки операторов сложения, сравнения, инкремента в C#, а также перегрузка операций преобразования типов данных - [Классы и объекты C#: виртуальные методы и свойства](https://csharp.webdelphi.ru/klassy-i-obekty-c-virtualnye-metody-i-svojstva/) - Рассматриваем, что такое виртуальный метод в C#, как использовать виртуальные методы. Ключевые слова override, virtual, sealed. Как запретить переопределение методов и свойств в C# - [Классы и объекты C#: преобразование типов, ключевые слова as и is](https://csharp.webdelphi.ru/klassy-i-obekty-c-preobrazovanie-tipov-klyuchevye-slova-as-i-is/) - В статье рассматриваются варианты преобразования типов в C#: восходящее преобразования (upcasting) и нисходящее преобразование (downcasting), а также варианты избегания проблем с ошибочными преобразованиями преобразованиями, включая использование ключевых слов AS и IS - [Классы и объекты C#: абстрактные классы](https://csharp.webdelphi.ru/klassy-i-obekty-c-abstraktnye-klassy/) - Абстрактные классы в C#: чем отличается абстрактный класс от других классов, как использовать абстрактные классы, абстрактные члены класса, отказ от использования абстрактных членов - [Классы и объекты C#: ключевое слово static](https://csharp.webdelphi.ru/klassy-i-obekty-c-klyuchevoe-slovo-static/) - Знакомимся с ключевым словом (модификатором) static. Оно позволяет создавать члены класса, относящиеся не к объекту, а к типу данных (классу) в целом. С помощью static можно объявлять поля,методы, свойства класса и объявлять статические классы C#. - [Классы и объекты C#: перегрузка методов](https://csharp.webdelphi.ru/klassy-i-obekty-c-peregruzka-metodov/) - Сигнатура метода C# и перегрузка методов. Перегрузка методов позволяет создавать в классе методы с одинаковым именем, но различающейся сигнатурой. - [Классы и объекты C#: полиморфизм](https://csharp.webdelphi.ru/klassy-i-obekty-c-polimorfizm/) - Рассматриваем ключевую особенность ООП - полиморфизм. Пример полиморфизма в C#. Для чего нужен полиморфизм в ООП - [Классы и объекты C#: инкапсуляция](https://csharp.webdelphi.ru/klassy-i-obekty-c-inkapsulyaciya/) - Разбираемся с термином "инкапсуляция" - что это такое, как используется в C#, в чем суть инкапсуляции в ООП - [Классы и объекты C#: наследование](https://csharp.webdelphi.ru/klassy-i-obekty-c-nasledovanie/) - В статье рассматривается механизм наследования классов в C#. Как создать класс от базового класса и наделить его своими свойствами и методами - [Классы и объекты C#: свойства](https://csharp.webdelphi.ru/klassy-i-obekty-c-svojstva/) - Модификаторы доступа к членам классов C#, что представляют свойства, как объявлять свойства, делать свойства C# доступными только для чтения, использовать автосвойства и выражения для свойств C# - [Локальные функции в C#](https://csharp.webdelphi.ru/lokalnye-funkcii-v-c/) - Локальные функции в C#: переменные окружения, где использовать локальные функции, как определить локальную функцию в C# - [Логические операции в C#](https://csharp.webdelphi.ru/logicheskie-operacii-v-c/) - Рассматриваем логические операции и выражения в C#: условный оператор if, условный оператор switch, выражение switch и тернарные операции - [Логические операторы C#](https://csharp.webdelphi.ru/logicheskie-operatory-c/) - Рассматриваем логические операторы C#: унарные, логическое отрицание, бинарные, логическое И (&), логическое ИЛИ (|), логическое исключающее ИЛИ (^), условное логическое И (&&), условное логическое ИЛИ (||), операторы равенства, равенство (==), неравенство (!=), операторы сравнения, меньше чем (), меньше или равно (=) - [Преобразование базовых типов данных](https://csharp.webdelphi.ru/preobrazovanie-tipov-dannyx/) - Преобразование базовых типов данных в .NET/C# - [Арифметические операторы C#](https://csharp.webdelphi.ru/arifmeticheskie-operatory-c/) - Рассматриваются арифметические операторы C#: унарные, бинарные, операторы сложения, деления, остатка от деления, остаток от деления вещественных чисел - [Структура программы на C#](https://csharp.webdelphi.ru/struktura-programmy-na-c/) - Итак, на примере простенькой программы мы рассмотрели структуру приложения в C# - изучили основные "строительные блоки" приложения такие как инструкции, блоки кода, комментарии. А также немного познакомились с файлом проекта и его некоторыми настройками - [Перечисления enum C#](https://csharp.webdelphi.ru/perechisleniya-enum-c/) - Использование перечислений enum в C#. Как объявить перечисление enum, как использовать enum - [Типы данных в C#](https://csharp.webdelphi.ru/tipy-dannuh/) - Рассматриваем систему типов данных в C#: целочисленные типы, вещественные, логические, пользовательские, перечисления, массивы, кортежи, классы, интерфейсы C# - [Знакомство с Visual Studio](https://csharp.webdelphi.ru/znakomstvo-s-visual-studio/) - Изучаем состав Visual Studio - основные окна IDE, пример написания первого приложения на C# - [Первое приложение на C#](https://csharp.webdelphi.ru/pervoe-prilozhenie-na-c/) - Для разработки приложений на языке C# нам, в самом простом случае, требуется только "Блокнот" (или любой другой текстовый редактор) и .NET SDK. Для создания проекта и его компиляции используется .NET CLI - набор инструментов для разработки, сборки, запуска и публикации приложений .NET. - [Алгоритм подсчёта количества рабочих дней](https://csharp.webdelphi.ru/algoritm-podschyota-kolichestva-rabochix-dnej/) - Алгоритм подсчёта количества рабочих дней с учётом праздников и переносов выходных дней - [Лабораторная работа по C#. Определить среднее значение величины](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-opredelit-srednee-znachenie-velichiny/) - пользователь вводит в консоль целые числа. После ввода очередного числа и нажатия кнопки "Enter" программа должна рассчитать среднее значение всех введенных чисел и вывести это значение в консоль. Признаком прекращения работы программы является нажатие на клавиатуре кнопки "q". - [Лабораторная работа №5. "Работа с двумерными массивами"](https://csharp.webdelphi.ru/laboratornaya-rabota-5-rabota-s-dvumernymi-massivami/) - Работа с двумерными массивами C#: заполнение массива, поиск максимума, печать массива - [HTTP-кэширование в ASP.NET Core Web API](https://csharp.webdelphi.ru/http-keshirovanie-v-asp-net-core-web-api/) - В этой статье мы рассмотрели два варианта кэширования ответов сервера, которые мы можем использовать в ASP.NET Core Web API - это кэширование ответов (response caching) и кэширование выходных данных (output caching). - [Централизованная обработка исключений в ASP.NET Core Web API](https://csharp.webdelphi.ru/centralizovannaya-obrabotka-isklyuchenij-v-asp-net-core-web-api/) - В приложениях ASP.NET Core мы можем организовать централизованную обработку исключений двумя способами - добавить в конвейер обработки запросов свой компонент middleware, в котором организовать логику обработки исключения или же создать свои обработчики исключений, реализуя интерфейс IExceptionHandler - [Контроллеры Web API. Согласование содержимого и форматирование данных ответа](https://csharp.webdelphi.ru/kontrollery-web-api-soglasovanie-soderzhimogo-i-formatirovanie-dannyx-otveta/) - По умолчанию, ASP.NET Core поддерживает формирование ответа клиенту, используя три mime-типа: application/json, text/json и text/plain. При необходимости, мы можем включать поддержку других форматов данных, например, XML и управлять согласованием содержимого с клиентом, - [ASP.NET Core Web API. Жизненный цикл зависимостей](https://csharp.webdelphi.ru/asp-net-core-web-api-zhiznennyj-cikl-zavisimostej/) - Сервисы ASP.NET Core могут регистрироваться в контейнере DI с различными сроками жизни (жизненным циклом): Transient-сервисы создаются каждый раз, когда их запрашивают из контейнера служб, Scoped-сервисы - применительно к веб-приложениям, создаются один раз для каждого запроса клиента (подключения), Singleton-сервисы - создаются один раз и используется при каждом запросе - [ASP.NET Core Web API. Способы создания компонентов middleware](https://csharp.webdelphi.ru/asp-net-core-web-api-sposoby-sozdaniya-komponentov-middleware/) - Мы рассмотрели три способа создания компонентов middleware в ASP.NET Core - с использованием лямбда-выражений и отдельных методов с параметром типа RequestDelegate, с использованием т.н. активации на основе фабрики и с использованием активации по соглашению. - [ASP.NET Core Web API. Создание и регистрация сервисов](https://csharp.webdelphi.ru/asp-net-core-web-api-sozdanie-i-registraciya-servisov/) - рассмотрели вопросы создания и регистрации сервисов в ASP.NET Core, включая и множественную регистрацию сервисов в приложении. Для регистрации собственных сервисов удобно использовать методы расширения для IServiceCollection, в которых мы можем производить регистрацию сразу всех необходимых нам сервисов - [ASP.NET Core Web API. Работа с окружением (интерфейс IWebHostEnvironment)](https://csharp.webdelphi.ru/asp-net-core-web-api-rabota-s-okruzheniem-interfejs-iwebhostenvironment/) - Используя свойства и методы IWebHostEnvironment , мы можем взаимодействовать с некоторыми переменными окружения в котором работает наше приложение. В частности, мы можем использовать различные имена для среды в которой выполняется приложение и, в зависимости от этого, изменять функциональность приложения. При необходимости, мы можем задать имя среды окружения, используя настройки переменных среды Windows - [ASP.NET Core Web API. Работа с ответом в middleware](https://csharp.webdelphi.ru/asp-net-core-web-api-rabota-s-otvetom-v-middleware/) - Работа с ответом в middleware - [ASP.NET Core Web API. Основные термины](https://csharp.webdelphi.ru/asp-net-core-web-api-osnovnye-terminy/) - Основные термины и определения, используемые в Web API - [Общие сведения об ASP.NET Core](https://csharp.webdelphi.ru/asp-net-core-vvedenie/) - Основные сведения о ASP.NET Core, с чего начинать изучение ASP.NET Core, что необходимо знать для ASP.NET Core - [Аутентификация и авторизация в ASP.NET Core MVC. Сброс пароля](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-sbros-parolya/) - Сброс пароля в ASP.NET Core MVC осуществляется в два этапа. На первом этапе мы по полученному от пользователя адресу электронной почты формируем токен на сброс пароля, формируем ссылку с этим токеном и отправляем её пользователю. На втором этапе пользователь должен перейти по полученной ссылке, ввести в форме новый пароль и отправить новый пароль вместе с токеном на сервер. На сервере производится сброс пароля - [Аутентификация и авторизация в ASP.NET Core MVC. Двухфакторная аутентификация](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-dvuxfaktornaya-autentifikaciya/) - Двухфакторная аутентификация позволяет дополнительно защитить аккаунт от несанкционированного доступа. Для использования такой схемы аутентификации мы должны её включить в настройках конкретного пользователя. При этом, код подтверждения может приходить только на подтвержденную почту пользователя. - [Аутентификация и авторизация в ASP.NET Core MVC. Подтверждение адреса электронной почты](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-podtverzhdenie-adresa-elektronnoj-pochty/) - В этой части мы научились использовать ещё один полезный механизм ASP.NET Core Identity - подтверждение адреса электронной почты нового пользователя. Подтверждение адреса используется для того, чтобы, во-первых, убедиться, что указанный адрес гарантированно доступен для отправки сообщений, а, во-вторых, в дальнейшем, такое подтверждение будет нам необходимо для выполнения двухфакторной аутентификации - [Аутентификация и авторизация в ASP.NET Core MVC. Политики авторизации](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-politiki-avtorizacii/) - Политики авторизации позволяют сделать более гибкую систему авторизации пользователей. Каждая политика может включать различные требования к пользователю, включая требования по ролям, наличие определенных утверждений, а также содержать пользовательские требования к авторизации. - [Аутентификация и авторизация в ASP.NET Core MVC. Работа с утверждениями (Claims)](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-rabota-s-utverzhdeniyami-claims/) - В этой части мы научились работать с утверждениями пользователя - считывать список утверждений, создавать и удалять их. Как было сказано ранее, утверждения используются для авторизации пользователей в ASP.NET Core Identity - [Аутентификация и авторизация в ASP.NET Core MVC. Управление ролями пользователей](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-upravlenie-rolyami-polzovatelej/) - В этой части мы разобрались с механизмом авторизации пользователей по ролям с использованием ASP.NET Core Identity и разработали приложение в котором научились работать в ролями пользователей, назначать и удалять пользователей из ролей. Для выполнения этих задач мы разработали новый контроллер, а также вспомогательный tag-хэлпер и необходимые представления, включая и представление, информирующее аутентифицированного пользователя о запрете доступа к определенному ресурсу. - [Дополнительные классы и структуры .NET. BigInteger](https://csharp.webdelphi.ru/dopolnitelnye-klassy-i-struktury-net-biginteger/) - Изучаем структуру BigInteger для работы с бесконечно большими числами в C - [Как измерить время выполнения операции в C#](https://csharp.webdelphi.ru/kak-izmerit-vremya-vypolneniya-operacii-v-c/) - Как измерить время выполнения операции в C#. Рассматриваем работу с классом Stopwatch в C# - [Класс Math для математических вычислений в C#](https://csharp.webdelphi.ru/klass-math-dlya-matematicheskix-vychislenij-v-c/) - В статическом классе Math содержатся функции для тригонометрических, гиперболических и прочих вычислений, методы округления чисел в большую и меньшую сторону, методы возведения чисел в степень и вычисления корней. - [Преобразование типов данных с помощью класса Convert](https://csharp.webdelphi.ru/preobrazovanie-tipov-dannyx-s-pomoshhyu-klassa-convert/) - Класс Convert позволяет преобразовывать значения из одних типов данных в другие, используя его статические методы - [Класс Process - запуск сторонних приложений в C#](https://csharp.webdelphi.ru/klass-process-zapusk-storonnix-prilozhenij-v-c/) - Используя класс Process мы можем запускать сторонние приложения из C#, открывать различные документы и ссылки на ресурсы в приложениях по умолчанию, перенаправлять потоки ввода-вывода из внешних приложений в свои, а также, при необходимости, получать различную диагностическую информацию о процессах запущенных в операционной системе. - [Dynamic Language Runtime. Ключевое слово dynamic](https://csharp.webdelphi.ru/dynamic-language-runtime-klyuchevoe-slovo-dynamic/) - Среда Dynamic Language Runtime добавляет в C# некоторое динамическое поведение в C#, позволяя создавать и использовать динамические объекты и методы - [Кортежи C#](https://csharp.webdelphi.ru/kortezhi-c-vtoraya-programma-dlya-sortirovki-massiva/) - Рассматриваются вопросы использование кортежей в C# - [Генерация случайных чисел в C#](https://csharp.webdelphi.ru/generaciya-sluchajnyx-chisel-v-c/) - Классы Random и RandomNumberGenerator в C# для генерации случайных чисел - [AES - симметричное шифрование в .NET C#](https://csharp.webdelphi.ru/aes-simmetrichnoe-shifrovanie-v-net-c/) - AES - симметричное шифрование в .NET C# . Пример симетричного шифрования в C# - [Алгоритмы подписи данных в .NET C#. HMAC](https://csharp.webdelphi.ru/algoritmy-podpisi-dannyx-v-net-c-hmac/) - Алгоритм HMAC-SHA256: рассматривается алгоритм подписи данных, проверка подписанного сообщения и возвращение подписанного сообщения в исходное состояние - [Алгоритмы хэширования в .NET C#](https://csharp.webdelphi.ru/algoritmy-xeshirovaniya-v-net-c/) - Алгоритмы хэширования в C# : SHA256, SHA384 и SHA512 - [Parallel LINQ (PLINQ) в C#. Обработка ошибок и отмена запроса (метод WithCancellation)](https://csharp.webdelphi.ru/parallel-linq-plinq-v-c-obrabotka-oshibok-i-otmena-zaprosa-metod-withcancellation/) - Обработка исключений и прерывание параллельных запросов в PLINQ - [Parallel LINQ (PLINQ) в C#. Режим выполнения запроса (метод WithExecutionMode)](https://csharp.webdelphi.ru/parallel-linq-plinq-v-c-rezhim-vypolneniya-zaprosa-metod-withexecutionmode/) - По умолчанию PLINQ анализирует запрос и, в зависимости от результата анализа, самостоятельно выбирает режим работы с запросом - параллельно или последовательно. Однако, если мы уверены, что в параллельном режиме мы точно повысим производительность нашего приложения, то мы можем принудительно заставить PLINQ выполнять запрос параллельно. Для этого мы используем метод WithExecutionMode - [Parallel LINQ (PLINQ) в C#. Сохранение порядка (методы AsOrdered и AsUnordered)](https://csharp.webdelphi.ru/parallel-linq-plinq-v-c-soxranenie-poryadka-metody-asordered-i-asunordered/) - Методы AsOrdered и AsUnordered в PLINQ - [Parallel LINQ (PLINQ) в C#. Метод AsParallel](https://csharp.webdelphi.ru/parallel-linq-plinq-v-c-metod-asparallel/) - Parallel LINQ (PLINQ) в C#: запуск параллельной обработки запроса. Параллельное выполнение операций - [Асинхронное программирование в C#](https://csharp.webdelphi.ru/asinxronnoe-programmirovanie-v-c/) - Асинхронное программирование позволяет избежать появления узких мест в приложении и увеличить общую скорость реагирования на действия пользователя - [Результаты, возвращаемые асинхронным методом](https://csharp.webdelphi.ru/rezultaty-vozvrashhaemye-asinxronnym-metodom/) - асинхронный метод может возвращать значения следующих типов: void, Task, Task, любой другой тип, реализующий метод GetAwaiter - [Ожидание выполнения асинхронных задач](https://csharp.webdelphi.ru/ozhidanie-vypolneniya-asinxronnyx-zadach/) - Для ожидания выполнения асинхронных методов мы можем использовать два статических метода класса Task - WhenAll и WhenAny - [Обработка исключений в асинхронных методах](https://csharp.webdelphi.ru/obrabotka-isklyuchenij-v-asinxronnyx-metodax/) - Асинхронные методы в C# также, как и другие методы могут генерировать исключения. . В этом случае вам может потребоваться обработка исключений в асинхронном методе. - [Валидация модели в C#. Интерфейс IValidatableObject](https://csharp.webdelphi.ru/validaciya-modeli-v-c-interfejs-ivalidatableobject/) - Реализуя интерфейс IValidatableObject , мы получаем фактически возможность т.н. самовалидации модели - вся проверка соответствия полей и свойств класса осуществляется непосредственно в методе Validate - [Валидация модели в C#. Создание собственных атрибутов валидации](https://csharp.webdelphi.ru/validaciya-modeli-v-c-sozdanie-sobstvennyx-atributov-validacii/) - Собственные атрибуты валидации должны являться наследниками класса ValidationAttribute и переопределять метод IsValid. В зависимости от наших потребностей мы можем создавать как атрибуты для проверки отдельных свойств модели, так и модели (объекта) целиком. - [Валидация модели в C#. Атрибуты валидации](https://csharp.webdelphi.ru/validaciya-modeli-v-c-atributy-validacii/) - Рассматриваем основные атрибуты валидации моделей в C# и их применение на практике - [Валидация модели в C#](https://csharp.webdelphi.ru/validaciya-modeli-v-c/) - Рассматриваем пример валидации модели в C# с использованием атрибутов валидации. - [Параллельное программирование в C#: класс Parallel](https://csharp.webdelphi.ru/parallelnoe-programmirovanie-v-c-klass-parallel/) - Класс Parallel и его применение для параллельного выполнения задач в C#, методы Parallel.ForEach и Parallel.For - [Библиотека TPL C#. Отмена задач](https://csharp.webdelphi.ru/biblioteka-tpl-c-otmena-zadach/) - В статье рассматривается работа с классом CancellationToken с помощью которого осуществляется отмена задач в TPL - [Библиотека TPL C#. Задачи продолжения (continuation task)](https://csharp.webdelphi.ru/biblioteka-tpl-c-zadachi-prodolzheniya-continuation-task/) - В статье рассматривается использование задач продолжения (continuation task) в библиотеке TPL .NET C# - [Библиотека TPL C#. Работа с Task](https://csharp.webdelphi.ru/biblioteka-tpl-c-rabota-s-task/) - В статье рассматриваются вопросы создания и ожидания массива зада, создание вложенных (дочерних) задач и их связь с родительскими задачами - [Библиотека TPL C#. Параллельное программирование](https://csharp.webdelphi.ru/biblioteka-tpl-c-parallelnoe-programmirovanie/) - В статье рассматриваются основные моменты по работе с библиотекой TPL в .NET C sharp - [Многопоточность в C#. Таймеры](https://csharp.webdelphi.ru/mnogopotochnost-v-c-tajmery/) - Рассматриваем работу класса Timer из пространства имен System.Threading, который позволяет выполнять метод через заданные промежутки времени - [Работа с JSON в C#: сериализация и десериализация объектов](https://csharp.webdelphi.ru/rabota-s-json-v-c-serializaciya-i-deserializaciya-obektov/) - сериализация и десериализация объектов в JSON - [Работа с JSON в C#: сериализация производных классов](https://csharp.webdelphi.ru/rabota-s-json-v-c-serializaciya-proizvodnyx-klassov/) - Проблемы сериализации производных классов в JSON C# с использованием JsonSerializer. Полиморфная сериализация JSON в .NET C# - [Работа с JSON в C#: применение невалидного JSON в C#](https://csharp.webdelphi.ru/rabota-s-json-v-c-primenenie-nevalidnogo-json-v-c/) - Рассматриваем вариант использования невалидного JSON для десериализации объектов C#. Используем возможности .NET 5 для десериализации JSON в C - [Как создать класс C# из JSON?](https://csharp.webdelphi.ru/kak-sozdat-klass-c-iz-json/) - В статье рассматривается два способа получить из JSON классы C#: с использованием Visual Studio и стороннего онлайн-сервиса - [JSON DOM в .NET 6](https://csharp.webdelphi.ru/json-dom-v-net-6/) - Работа с JSON DOM в .NET 6/ - [Пользовательские конвертеры. Класс JsonConvert](https://csharp.webdelphi.ru/polzovatelskie-konvertery-klass-jsonconvert/) - Пользовательские конвертеры JSON позволяют настроить свою логику сериализации или десериализации JSON. - [Работа с файловой системой в C#. Работа с дисками (класс DriveInfo)](https://csharp.webdelphi.ru/rabota-s-fajlovoj-sistemoj-v-c-rabota-s-diskami-klass-driveinfo/) - Использование класса C# DriveInfo для получения информации о логических дисках компьютера - [Работа с файловой системой в C#. Работа с каталогами (классы Directory и DirectoryInfo)](https://csharp.webdelphi.ru/rabota-s-fajlovoj-sistemoj-v-c-rabota-s-katalogami-klassy-directory-i-directoryinfo/) - Сегодня мы рассмотрели основные моменты по работе с каталогами в C# с использованием классов Directory и DirectoryInfo. Научились создавать, перемещать и удалять каталоги, перечислять все подкаталоги в определенном каталоге - [Работа с файловой системой в C#. Работа с файлами (классы File и FileInfo)](https://csharp.webdelphi.ru/rabota-s-fajlovoj-sistemoj-v-c-rabota-s-fajlami-klassy-file-i-fileinfo/) - Учимся создавать файлы и записывать в них данные, перемещать, копировать и удалять файлы в C#, а также получать информацию о конкретном файле. - [Работа с файловой системой в C#. Работа с путями (класс Path)](https://csharp.webdelphi.ru/rabota-s-fajlovoj-sistemoj-v-c-rabota-s-putyami-klass-path/) - Разобрали вопрос того как в C# создать временный файл, соединить несколько строк в путь, получить и изменить расширение файла, используя класс Path. - [Работа с классом FileStream в C#](https://csharp.webdelphi.ru/rabota-s-klassom-filestream-v-c/) - Рассматриваем основные свойства и методы класса FileStream для работы с файлами в C# - [Чтение и запись бинарных файлов в C#](https://csharp.webdelphi.ru/chtenie-i-zapis-binarnyx-fajlov-v-c/) - Для работы с бинарными файлами в C# можно использовать созданные для этих целей классы BinaryWriter и BinaryReader. - [Работа с архивами zip в C#](https://csharp.webdelphi.ru/rabota-s-arxivami-zip-v-c/) - Работа с архивами zip в C# : как создать архив zip, как распаковать архив, создать zip из папи в C# - [Отслеживание изменений в файловой системе](https://csharp.webdelphi.ru/otslezhivanie-izmenenij-v-fajlovoj-sisteme/) - Рассматриваем основные возможности C# для отслеживания изменений в каталогах с использованием класса FileSystemWatcher - [Класс, реализующий IFormatProvider для вывода размера файла](https://csharp.webdelphi.ru/klass-realizuyushhij-iformatprovider-dlya-vyvoda-razmera-fajla/) - Рассматриваем класс, реализующий интерфейс IFormatProvider для форматирования размеров файлов в удобном для пользователя виде - [LINQ в C#: проекции и фильтрация выборки](https://csharp.webdelphi.ru/linq-v-c-proekcii-i-filtraciya-vyborki/) - рассмотрели такие методы расширения LINQ как Select, Where и SelectMany, используемые для определения проекций и фильтрации значений - [LINQ в C#: сортировка элементов](https://csharp.webdelphi.ru/linq-v-c-sortirovka-elementov/) - Используя методы OrderBy и OrderByDescending, а также ThenBy и ThenByDescending , мы можем проводить сортировку объектов любой сложности как по возрастанию, так и по убыванию - [LINQ в C#: агрегатные операции](https://csharp.webdelphi.ru/linq-v-c-agregatnye-operacii/) - Агрегатные методы в LINQ позволяют объединять выборки по какому-либо критерию: рассчитать сумму, среднее значение выборки, определить её размер и так далее. - [LINQ в C#: выбор и пропуск элементов](https://csharp.webdelphi.ru/linq-v-c-vybor-i-propusk-elementov/) - Методы LINQ TakeXXX и SkipXXX удобно использовать для организации постраничного вывода результатов. - [LINQ в C#: группировка элементов последовательности](https://csharp.webdelphi.ru/linq-v-c-gruppirovka-elementov-posledovatelnosti/) - Результатом выполнения метода GroupBy в LINQ является коллекция групп. Используя метод Select также можно создавать свои проекции элементов, полученной последовательности - [LINQ в C#: проверка элементов последовательности](https://csharp.webdelphi.ru/linq-v-c-proverka-elementov-posledovatelnosti/) - Методы All, Any и Contains в LINQ. Чтобы метод Contains мог проверять соответствие объектов по значению свойств, необходимо переопределить метод Equals. - [LINQ в C#: операции над множествами](https://csharp.webdelphi.ru/linq-v-c-operacii-nad-mnozhestvami/) - Основные операции над множествами в LINQ C#: Distinct, Except, Intersect, Union. - [LINQ в C#: объединение коллекций](https://csharp.webdelphi.ru/linq-v-c-obedinenie-kollekcij/) - Concat - объединяет две однородные коллекции, Zip - объединяет две разнородные коллекции, Join - объединяет две разнородные коллекции по ключу - [LINQ в C#: сравнение последовательностей](https://csharp.webdelphi.ru/linq-v-c-sravnenie-posledovatelnostej/) - Иногда, при работе с несколькими коллекциями или последовательностями элементов может потребоваться определить сам факт равенства или неравенства всех элементов в одной коллекции всем элементам во второй коллекции - [LINQ в C#: отложенное и немедленное выполнение запросов LINQ](https://csharp.webdelphi.ru/linq-v-c-otlozhennoe-i-nemedlennoe-vypolnenie-zaprosov-linq/) - В зависимости от того, какой метод используется мы можем получить результат как немедленно, так и в момент, когда данные запроса будут действительно нам необходимы - [Делегаты в LINQ](https://csharp.webdelphi.ru/delegaty-v-linq/) - Использование полноценных методов в LINQ вместо лямбда-выражений. Разбор описаний методов LINQ на примере - [LINQ в C#: краткий справочник методов LINQ](https://csharp.webdelphi.ru/linq-v-c-kratkij-spravochnik-metodov-linq/) - В этой статье собраны все методы LINQ, которые рассматривались в блоге. По каждому методу дано его краткое описание, указан способ выполнения (отложенное или немедленное выполнение) и ссылка на статью блога в которой демонстрируется пример использования метода. - [Рефлексия (отражение) в C#. Исследование типов](https://csharp.webdelphi.ru/refleksiya-otrazhenie-v-c-issledovanie-tipov/) - Рассматриваем основные методы и свойства класса Type для изучения типов C#: как получить список методов, полей и свойств класса C#, список конструкторов и реализуемых интерфейсов - [Рефлексия (отражение) в C#. Работа со свойствами объекта (класс PropertyInfo)](https://csharp.webdelphi.ru/refleksiya-otrazhenie-v-c-rabota-so-svojstvami-obekta-klass-propertyinfo/) - Для работы со свойствами классов и объектов C# используется класс PropertyInfo. Используя экземпляры этого класса мы можем получить детальную информацию о свойстве, а также прочитать или записать его значение для определенного экземпляра класса, используя, соответственно, методы GetValue() и SetValue(). - [Сортировка элементов списка List](https://csharp.webdelphi.ru/sortirovka-elementov-spiska-list/) - Реализовали интерфейс IComparable в своем классе и создали компаратор по умолчанию, а также отсортировали список List, используя анонимный метод в качестве параметра метода Sort. - [Двунаправленный (двусвязный) список в C# (класс LinkedList)](https://csharp.webdelphi.ru/dvunapravlennyj-dvusvyaznyj-spisok-v-c-klass-linkedlist/) - Сегодня мы на "живом" примере разобрались с тем, что из себя представляет двусвязный список LinkedList в C# и рассчитали с его помощью площадь многоугольника - [Очередь Queue в C#](https://csharp.webdelphi.ru/ochered-queue-v-c/) - Рассматриваем работу с очередью (Queue) в C# - [Стек Stack в C#](https://csharp.webdelphi.ru/stek-stack-v-c/) - Рассматриваем работу со стеком в C# - [Словарь Dictionary в C#](https://csharp.webdelphi.ru/slovar-dictionary-v-c/) - Рассматриваем работу со словарем Dictionary в C# - [Класс ObservableCollection в C#](https://csharp.webdelphi.ru/klass-observablecollection-v-c/) - ObservableCollection - это класс коллекции, которая позволяет подписаться на уведомления об изменениях. - [Ограничения типов](https://csharp.webdelphi.ru/ogranicheniya-tipov/) - Если предполагается, что универсальный класс или метод будут использовать любые другие операции с универсальными элементами, кроме обычного присвоения или вызывать методы, которые не поддерживает System.Object то необходимо применять ограничения типов - [Структура TimeSpan в C#](https://csharp.webdelphi.ru/struktura-timespan-v-c/) - Рассматриваем свойства и методы структуры TimeSpan в C# - [Форматирование даты и времени в C#](https://csharp.webdelphi.ru/formatirovanie-daty-i-vremeni-v-c/) - Форматирование даты и времени в C#. Использование стандартных и пользовательских форматов даты и времени в C#. - [Парсинг DateTime в C#](https://csharp.webdelphi.ru/parsing-datetime-v-c/) - В статье рассматриваются различные методы парсинга (анализа) строк, содержащих дату/время: Parse, ParseExact, TryParse, TryParseExact - [Типы DateOnly и TimeOnly в C#](https://csharp.webdelphi.ru/tipy-dateonly-i-timeonly-v-c/) - Рассматриваем основные моменты по раоте с новыми типами данных в .NET 6 - DateOnly и TimeOnly - [Строки в C#: методы работы со строками](https://csharp.webdelphi.ru/stroki-v-c-metody-raboty-so-strokami/) - В статье рассматриваются основные методы класса String для работы со строками в C#: копирование, замена строк, обрезка строки, разделение строк C# - [Фильтры исключений в C#](https://csharp.webdelphi.ru/filtry-isklyuchenij-v-c/) - Рассматриваем фильтрацию исключений в C# с использованием ключевого слово when. - [Использование делегатов в C#](https://csharp.webdelphi.ru/ispolzovanie-delegatov-v-c/) - использование делегатов в классах C# позволяет делегировать выполнение какого-либо кода другим методам, даже не принадлежащим классу - [События в C# и их вызов](https://csharp.webdelphi.ru/sobytiya-v-c-i-ix-vyzov/) - Создание событий в C#, учимся определять события в классе, подписываться на события и создавать свои собственные события в C# - [Клонирование объектов. Интерфейс ICloneable](https://csharp.webdelphi.ru/klonirovanie-obektov-interfejs-icloneable/) - Способы создания копий объектов в C#: реализация интерфейса IClonable и использование поверхностного копирования методом MemberwiseClone - [Сравнение произвольных типов в C#. Интерфейс IComparable](https://csharp.webdelphi.ru/sravnenie-proizvolnyx-tipov-v-c-interfejs-icomparable/) - IComparable - интерфейс, предназначенный для реализации метода сравнения двух объектов произвольного типа - [Сортировка объектов произвольного типа. Интерфейс IComparer](https://csharp.webdelphi.ru/sortirovka-obektov-proizvolnogo-tipa-interfejs-icomparer/) - IComparer позволяет переопределить способ сортировки элементов коллекции и создать логику сравнения объектов, отличную от реализованной в методе CompareTo - [Коллекции объектов. Интерфейсы IEnumerable и IEnumerator](https://csharp.webdelphi.ru/kollekcii-obektov-interfejsy-ienumerable-i-ienumerator/) - Используя интерфейсы IEnumerable и IEnumerator мы можем создавать собственные классы, позволяющие перечислять коллекции элементов определенного типа - [Разделяемые классы и методы в C# (ключевое слово partial)](https://csharp.webdelphi.ru/razdelyaemye-klassy-i-metody-v-c-klyuchevoe-slovo-partial/) - Рассматриваем работу с разделяемыми классами и методами в C - [Классы и объекты C#: значение null](https://csharp.webdelphi.ru/klassy-i-obekty-c-znachenie-null/) - Рассматриваем значение null в C#. Для чего и как используется значение null, как провести проверку на null ссылочного типа данных - [Работа с потоками ввода-вывода консоли](https://csharp.webdelphi.ru/rabota-s-potokami-vvoda-vyvoda-konsoli/) - Работа с потоками ввода-вывода консоли: перенаправление потоков ввода, вывода и потока ошибок из консоли в файл - [Передача параметров в консольное приложение](https://csharp.webdelphi.ru/peredacha-parametrov-v-konsolnoe-prilozhenie/) - Параметры для консольного приложения могут передаваться через командную строку. Параметры отделяются друг от друга пробелами. Если необходимо передать параметр, содержащий пробелы, то он должен быть заключен в двойные кавычки. - [Работа с консолью в C#. Работа с буфером консоли](https://csharp.webdelphi.ru/rabota-s-konsolyu-v-c-rabota-s-buferom-konsoli/) - Рассматриваем свойства консоли для управления буфером BufferWidth (ширина буфера в столбцах) и BufferHeight (высота буфера в строках) - [Работа с консолью в C# (класс Console). Украшение консоли](https://csharp.webdelphi.ru/rabota-s-konsolyu-v-c-klass-console-ukrashenie-konsoli/) - В этой части учебника по C# мы научились украшать консоль, используя свойства класса Console: изменять цвет текста, фона, изменять заголовок окна консоли. - [Рекурсивные методы](https://csharp.webdelphi.ru/rekursivnye-metody/) - Что такое рекурсия, главные составляющие рекурсивного метода, схема работы рекурсии в C#, вычисление факториала - [Пространства имен (namespace) в C#](https://csharp.webdelphi.ru/prostranstva-imen-namespace-v-c/) - Пространства имен (namespace) в C#: определение пространства имен в C#, глобальные пространства имен и пространства имен уровня файла. - [Знакомство с Visual Studio Code](https://csharp.webdelphi.ru/znakomstvo-s-visual-studio-code/) - Сегодня мы познакомились с одним из специализированных инструментов разработчика - редактором кода Visual Studio Code и переписали наше первое приложение, используя преимущества этого редактора. При разработке программного обеспечения немаловажную роль играет подсветка синтаксиса и наличие таких инструментов повышения скорости и удобства разработки как IntelliSense. - [Аутентификация и авторизация в ASP.NET Core MVC. Своя система аутентификации пользователей](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-svoya-sistema-autentifikacii-polzovatelej/) - В этой части мы разработали простую систему аутентификации пользователей в приложении ASP.NET Core MVC, используя возможности, предоставляемые библиотекой ASP.NET Core Identity. В качестве упрощения, для хранения данных пользователя использовалась база данных SQLite. - [Аутентификация и авторизация в ASP.NET Core MVC. Шаблон Identity](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-mvc-shablon-identity/) - В этой части мы познакомились с шаблоном Identity для проекта ASP.NET Core MVC, узнали где хранятся по умолчанию данные пользователей и представления для Identity - [Компоненты представлений в ASP.NET Core MVC. Свойства ViewComponent](https://csharp.webdelphi.ru/komponenty-predstavlenij-v-asp-net-core-mvc-svojstva-viewcomponent/) - Наследование компонента представления от ViewComponent позволяет нам не только использоваться для рендеринга частичные представления, но и воспользоваться рядом полезных свойств, таких как контекст запроса, данные о маршруте, данные, передаваемые в представление (ViewData/ViewBag) и т.д. - [Компоненты представлений в ASP.NET Core MVC. Вывод результатов компонента (IViewComponentResult)](https://csharp.webdelphi.ru/komponenty-predstavlenij-v-asp-net-core-mvc-vyvod-rezultatov-komponenta-iviewcomponentresult/) - Несмотря на то, что методы Invoke() и InvokeAsync() могут возвращать результат любого типа, для генерации контента желательно использовать классы, реализующие интерфейс IViewComponentResult. В ASP.NET Core MVC такими классами являются ViewComponentResult , ContentViewComponentResult и HtmlContentViewComponentResult. - [Компоненты представлений в ASP.NET Core MVC. ViewComponentResult и работа с представлениями](https://csharp.webdelphi.ru/komponenty-predstavlenij-v-asp-net-core-mvc-viewcomponentresult-i-rabota-s-predstavleniyami/) - Компоненты представлений могут передавать данные в частичные представления, используя методы View() родительского компонента ViewComponent. Частичное представление компонента должно располагаться по одному из путей по умолчанию или же путь можно настроить, используя настройки сервисов в приложении. - [Лабораторная работа по C#. Операции побитового сдвига](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-operacii-pobitovogo-sdviga/) - Даны два числа - 16 и 2. Напишите программу на C#, которая, используя операции сдвига влево (), а также сложение или вычитание над представленными числами получает итоговый результат равный 127. - [Знак вопроса (?) в C#](https://csharp.webdelphi.ru/znak-voprosa-v-c/) - C# вопрос -для чего используется знак вопроса в C#, тернарная операция, обнуляемый тип данных, null-условный оператор - [Компоненты представлений в ASP.NET Core MVC. Передача данных в компоненты](https://csharp.webdelphi.ru/komponenty-predstavlenij-v-asp-net-core-mvc-peredacha-dannyx-v-komponenty/) - Компоненты представлений могут принимать различные данные, необходимые для работы. Мы можем передавать в компоненты представлений зависимости (сервисы), простые типы данных или объекты в качестве параметров компонента. - [Компоненты представлений в ASP.NET Core MVC. Определение компонента](https://csharp.webdelphi.ru/komponenty-predstavlenij-v-asp-net-core-mvc-opredelenie-komponenta/) - Компоненты представления (View Components) представляют собой обычные классы C#, которые связаны с представлением и используются для вывода какой-либо информации пользователям. По своим возможностям, компоненты представлений похожи на частичные представления. Вызов компонентов представлений может осуществляться как с использованием метода Component.InvokeAsync(), так и с использованием специального tag-хэлпера vc. - [Tag-хэлперы в ASP.NET Core MVC. Управление выводом (TagHelperOutput)](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-upravlenie-vyvodom-taghelperoutput/) - Управление выводом tag-хэлпера осуществляется с использованием свойств объекта TagHelperOutput. При генерации html-разметки тэга мы можем добавлять текст или другую html-разметку перед и после html-тэга хэлпера, добавлять атрибуты к html-тегу хэлпера и т.д. При необходимости, мы можем определить классе tag-хэлпера публичные свойства, которые будут использоваться в качестве атрибутов tag-хэлпера. - [Tag-хэлперы в ASP.NET Core MVC. Асинхронные операции в tag-хэлперах](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-asinxronnye-operacii-v-tag-xelperax/) - Асинхронные операции в tag-хэлперах используются, в том числе, для вывода содержимого дочерних tag-хэлперов. Для асинхронного вывода используется метод ProcessAsync() и, при этом, если tag-хэлпер содержит оба метода - Process() и ProcessAsync(), то при генерации разметки представления предпочтение будет отдаваться асинхронной операции. - [Tag-хэлперы в ASP.NET Core MVC. Создание tag-хэлперов](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-sozdanie-tag-xelperov/) - Класс tag-хэлпера обычно наследуется от класса TagHelper и, в соответствии с соглашением по умолчанию, может содержать в названии суффикс TagHelper. В представлении класс tag-хэлпера будет представлен обычным html-тегом с названием, соответствующим названию класса без суффикса. - [Tag-хэлперы в ASP.NET Core MVC. Распределенное кэширование (DistributedCacheTagHelper)](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-raspredelennoe-keshirovanie-distributedcachetaghelper/) - Tag-хэлпер DistributedCacheTagHelper в ASP.NET Core MVC представлен тэгом и позволяет использовать в приложение распределенное кэширование. При использовании этого тэга мы должны каждому элементу кэша присваивать свое уникальное имя, используя атрибут name. - [Tag-хэлперы в ASP.NET Core MVC. CacheTagHelper](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-cachetaghelper/) - Tag-хэлпер CacheTagHelper позволяет кэшировать отдельные элементы представлений в памяти. Этот хэлпер представлен в ASP.NET Core MVC тэгом и, в зависимости от заданных атрибутов, позволяет создавать различные версии кэшируемых элементов, задавать политики кэширования и приоритет элементов при очистке памяти. - [Tag-хэлперы в ASP.NET Core MVC. Tag-хэлперы LinkTagHelper, ScriptTagHelper и EnvironmentTagHelper](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-tag-xelpery-linktaghelper-scripttaghelper-i-environmenttaghelper/) - Tag-хэлперы LinkTagHelper, ScriptTagHelper и EnvironmentTagHelper используются, в основном, в макетах приложений. LinkTagHelper и ScriptTagHelper используются для загрузки файлов стилей и скриптов. Tag-хэлпер EnvironmentTagHelper используется для генерации определенной html-разметки в зависимости от того, в какой стадии находится приложение (Development, Production и т.д.) - [Tag-хэлперы в ASP.NET Core MVC. Tag-хэлперы элементов форм](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-tag-xelpery-elementov-form/) - Сегодня мы рассмотрели использование tag-хэлперов для создания веб-форм в ASP.NET Core MVC на примере конкретной модели данных. Tag-хэлперы позволяют создавать различные элементы форм и при этом делать это в достаточно удобной форме - практически используя известные названия html-элементов. - [Tag-хэлперы в ASP.NET Core MVC. Генерация ссылок (AnchorTagHelper)](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-generaciya-ssylok-anchortaghelper/) - AnchorTagHelper позволяет формировать ссылки внутри приложения, используя различные атрибуты. При необходимости, мы можем передавать различные параметры действий контроллера, используя атрибуты tag-хэлпера, создавать ссылки на другие домены и т.д. - [Представления в ASP.NET Core MVC. Строго типизированные html-хэлперы элементов форм](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-strogo-tipizirovannye-html-xelpery-elementov-form/) - Строго типизированные html-хэлперы можно применять в представлениях у которых определен тип передаваемой из контроллера модели (директива @model). - [Tag-хэлперы в ASP.NET Core MVC. Введение](https://csharp.webdelphi.ru/tag-xelpery-v-asp-net-core-mvc-vvedenie/) - Tag-хэлперы в ASP.NET Core MVC предоставляют функциональность для создания html-разметки приложений. В отличие от html-хэлперов, такая функциональность обладает, как минимум одним преимуществом, а именно - для создания разметки используются стандартные html-элементы в которых tag-хэлперы применяются как обычные атрибуты. - [Фильтры в ASP.NET Core MVC. Введение](https://csharp.webdelphi.ru/filtry-v-asp-net-core-mvc-vvedenie/) - Фильтры позволяют выполнять определенные действия до или после какого-либо этапа обработки запроса. В зависимости от назначения, фильтры подразделяются на пять групп и выполнятся в определенной последовательности. - [Фильтры в ASP.NET Core MVC. Фильтры результатов действий](https://csharp.webdelphi.ru/filtry-v-asp-net-core-mvc-filtry-rezultatov-dejstvij/) - Фильтры результатов действий выполняться после всех остальных фильтров. Такие фильтры могут реализовывать сразу четыре интерфейса IResultFilter, IAsyncResultFilter, IAlwaysRunResultFilter или IAsyncAlwaysRunResultFilter - [Фильтры в ASP.NET Core MVC. Фильтры исключений](https://csharp.webdelphi.ru/filtry-v-asp-net-core-mvc-filtry-isklyuchenij/) - Фильтры исключений способны обрабатывать исключения, которые возникают при создании объекта контроллера или при привязке модели, при выполнении фильтров действий или методов контроллера - [Фильтры в ASP.NET Core MVC. Фильтры действий](https://csharp.webdelphi.ru/filtry-v-asp-net-core-mvc-filtry-dejstvij/) - Фильтры действий реализуют интерфейс IActionFilter или IActionFilterAsync и могут использоваться как для анализа привязки модели так и для модификации входных параметров запроса. - [Фильтры в ASP.NET Core MVC. Фильтры ресурсов](https://csharp.webdelphi.ru/filtry-v-asp-net-core-mvc-filtry-resursov/) - Фильтры ресурсов в ASP.NET Core MVC выполняются сразу после фильтров авторизации и могут использоваться, например, для установления/анализа заголовков запроса, работы с кэшем (в особенности, если речь заходит о разработке API) - [Фильтры в ASP.NET Core MVC. Передача параметров и зависимостей в фильтры](https://csharp.webdelphi.ru/filtry-v-asp-net-core-mvc-peredacha-parametrov-i-zavisimostej-v-filtry/) - При необходимости, мы можем передавать в фильтры различные параметры и зависимости. Чтобы передать в фильтр параметры или зависимости, необходимо определить конструктор фильтра с необходимыми параметрами. - [Фильтры в ASP.NET Core MVC. Область действия и очередность выполнения фильтров](https://csharp.webdelphi.ru/filtry-v-asp-net-core-mvc-oblast-dejstviya-i-ocherednost-vypolneniya-filtrov/) - Фильтры в ASP.NET Core MVC могут иметь три области действия - метод контроллера, контроллер целом и глобальная область действия. В зависимости от области действия фильтра, по умолчанию ASP.NET Core MVC определяет очередность выполнения фильтра - [Маршрутизация в ASP.NET Core MVC. Введение](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-mvc-vvedenie/) - Система маршрутизации ASP.NET Core MVC базируется на маршрутизации ASP.NET Core, но добавляет в эту систему свои дополнительные моменты. Например, методы для сопоставления входящих запросов с контроллерами и их действиями. - [Маршрутизация в ASP.NET Core MVC. Области](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-mvc-oblasti/) - Области в ASP.NET Core - это отдельные сегменты приложение, объединенные по какому-либо признаку. Все области располагаются в специальной папке проекта с названием Areas. - [Маршрутизация в ASP.NET Core MVC. Маршрутизация на основе атрибутов](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-mvc-marshrutizaciya-na-osnove-atributov/) - Маршрутизация на основе атрибутов позволяет разрабатывать более гибкую систему маршрутизации в приложениях ASP.NET Core MVC. Для указания маршрута по которому будет выполняться действие используется атрибут Route в параметрах которого передается шаблон маршрута. - [Маршрутизация в ASP.NET Core MVC. Маршрутизация на основе соглашений](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-mvc-marshrutizaciya-na-osnove-soglashenij/) - Шаблон маршрута играет важную роль в работе системы маршрутизации ASP.NET Core MVC. Шаблон маршрута, обычно, состоит из нескольких сегментов. Каждый сегмент может быть параметром маршрута или статическим. Для параметров маршрута мы можем задавать значения по умолчанию и ограничения как и в базовом ASP.NET Core. - [Модели в ASP.NET Core MVC. Аннотации данных](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-annotacii-dannyx/) - Аннотации данных позволяют указать ASP.NET Core MVC правила отображения свойств моделей в представлении. Например, мы можем указать как должно отображаться имя свойства, указать правила рендеринга свойств при генерации html-кода страницы и т.д. - [Модели в ASP.NET Core MVC. Самовалидация модели](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-samovalidaciya-modeli/) - Самовалидация модели позволяет проводить проверку модели непосредственно внутри класса. Для того, чтобы модель могла проводить свою валидацию самостоятельно, класс модели должен реализовывать интерфейс IValidatableObject. - [Модели в ASP.NET Core MVC. Создание атрибута валидации](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-sozdanie-atributa-validacii/) - При необходимости мы можем создавать собственные атрибуты валидации и применять их как на уровне отдельных свойств, так и на уровне модели в целом. Класс атрибута должен быть унаследован от класса ValidationAttribute и переопределять метод IsValid(). - [Модели в ASP.NET Core MVC. Tag-хэлперы валидации](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-tag-xelpery-validacii/) - Tag-хэлперы валидации позволяют выводить сообщения об ошибках непосредственно в представлении. Ошибки можно выводить как отдельно для каждого поля, так и в виде сводки. При необходимости, мы можем использовать CSS для стилизации вывода сообщений об ошибках. - [Модели в ASP.NET Core MVC. Валидация модели](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-validaciya-modeli/) - Валидация модели занимает важное место в разработке приложений. В ASP.NET Core MVC валидация модели базируется на общем механизме валидации в .NET, но, при этом, вносит в этот механизм свои дополнительные возможности, например, по изменению состояния модели через свойство ModelState. - [Модели в ASP.NET Core MVC. Валидация на стороне клиента](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-validaciya-na-storone-klienta/) - Валидация на стороне клиента позволяет избежать дополнительных запросов к серверу и проводить проверку корректности введенных в форму данных на этапе заполнения соответствующих полей. В случае необходимости, мы также можем использовать атрибут Remote, который для валидации определенного поля отправляет сведения на сервер и ожидает получения результата валидации. - [Модели в ASP.NET Core MVC. Атрибуты валидации](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-atributy-validacii/) - Атрибуты валидации модели позволяют подключать к проверке тех или иных свойств дополнительную логику. Например, мы можем проверять строковые значения на соответствие регулярному выражению или проверять вхождение числа в заданный диапазон значений и т.д. - [Уважаемые посетители блога, необходима ваша помощь!](https://csharp.webdelphi.ru/uvazhaemye-posetiteli-bloga-neobxodima-vasha-pomoshh/) - [Модели в ASP.NET Core MVC. Управление привязкой модели](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-upravlenie-privyazkoj-modeli/) - Управление привязкой модели позволяет переопределить работу привязчика. Для управления привязкой используются различные атрибуты, позволяющие сделать свойство обязательным для привязки или, наоборот, исключить из прявязки. - [Модели в ASP.NET Core MVC. Привязка модели](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-privyazka-modeli/) - За привязку модели отвечает объект, реализующий интерфейс IModelBinder. Узнать состояние привязки модели мы можем из свойства ModelState.IsValid контроллера. - [Модели в ASP.NET Core MVC. Введение](https://csharp.webdelphi.ru/modeli-v-asp-net-core-mvc-vvedenie/) - Модели в ASP.NET Core MVC: виды моделей, отличительные особенности, применимость - [Представления в ASP.NET Core MVC. Генерация ссылок](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-generaciya-ssylok/) - Для генерации ссылок в ASP.NET Core MVC предусмотрено два хэлпера - ActionLink и RouteLink. Первый хэлпер использует для генерации ссылок названия действий и контроллеров, второй - названия маршрутов. - [Представления в ASP.NET Core MVC. Шаблонные html-хэлперы](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-shablonnye-html-xelpery/) - Шаблонные html-хэлперы создают html-элементы представления на основании анализа свойств модели, передаваемой в представление. Такие хэлперы могут создавать как отдельные поля для свойств модели, так и генерировать сразу набор html-элементов для всей модели. - [Представления в ASP.NET Core MVC. Html-хэлперы элементов форм](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-html-xelpery-elementov-form/) - HTML-хэлперы представляют собой методы, которые формируют строку - html-разметку представления по заданным параметрам. - [Контроллеры ASP.NET Core MVC. Результаты действий (IActionResult)](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-rezultaty-dejstvij-iactionresult/) - Обычно, действия контроллера возвращают объекты, реализующие интерфейс IActionResult. Мы можем самостоятельно создать класс, реализующий IActionResult, а можем воспользоваться уже готовыми классами и методами для отправки клиенту ответов с определенными статусными кодами. - [Представления в ASP.NET Core MVC. Внедрение зависимостей в представления](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-vnedrenie-zavisimostej-v-predstavleniya/) - Для внедрения зависимостей в представление используется директива Razor @inject. При внедрении зависимостей в представление стоит придерживаться разделения обязанностей - большинство данных в представление должно передаваться из контроллеров и внедрение зависимостей в представление стоит использовать в исключительных случаях. - [Представления в ASP.NET Core MVC. Частичные представления](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-chastichnye-predstavleniya/) - Частичные представления могут встраиваться в обычные представления и, обычно, используются для разбивки сложных представлений на более простые. - [Представления в ASP.NET Core MVC. Файлы _ViewStart.cshtml и _ViewImports.cshtml](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-fajly-_viewstart-cshtml-i-_viewimports-cshtml/) - Файлы _ViewStart.cshtml и _ViewImports.cshtml позволяют сократить код представлений и вынести некоторые повторяющиеся части приложения отдельно. - [Представления в ASP.NET Core MVC. Использование макетов](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-ispolzovanie-maketov/) - Макеты позволяют создать единообразие в вашем приложении. Обычно, в макеты включаются элементы, которые должны повторяться на всех страницах приложения. По сути, макет - это представление в котором обязательно определяется метод RenderBody() на место которого вставляется представление, переданное из контроллера. - [Представления в ASP.NET Core MVC. Передача данных в представление](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-peredacha-dannyx-v-predstavlenie/) - Передача данных в представление может осуществляться различными способами - с использованием свойств ViewData, ViewBag контроллера, атрибута [ViewData], а также с использованием модели данных. - [Представления в ASP.NET Core MVC. Общие сведения о Razor](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-obshhie-svedeniya-o-razor/) - В этой части мы познакомились в общих чертах с разметкой Razor и её применении для создания представлений в ASP.NET Core MVC. Используя Razor, мы можем создавать циклы, использовать условные операторы, производить вычисления на языке C#, а затем выводить эти представления в виде HTML. - [Представления в ASP.NET Core MVC. Введение](https://csharp.webdelphi.ru/predstavleniya-v-asp-net-core-mvc-vvedenie/) - Представления отображают информацию пользователю и, обычно, хранятся в папках View или View/Shared приложения. Файл представления имеет расширение cshtml. За рендеринг представления в html-страницу отвечают объекты класса ViewResult, которые создаются методом View() класса Controller. - [Контроллеры ASP.NET Core MVC. Способы получения зависимостей](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-sposoby-polucheniya-zavisimostej/) - ля получения сервисов в контроллере ASP.NET Core MVC мы можем использовать различные способы - через конструктор, через свойство HttpContext.RequestServices или с использованием атрибута FromService - [Контроллеры ASP.NET Core MVC. Отправка кодов состояния HTTP 4xx](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-otpravka-kodov-sostoyaniya-http-4xx/) - ASP.NET Core MVC предоставляет сразу ряд классов, отправляющих коды состояния HTTP группы 4хх, сообщающих нам о том, что на стороне клиента произошла какая-либо ошибка. - [Контроллеры ASP.NET Core MVC. Отправка кодов состояния HTTP 2xx](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-otpravka-kodov-sostoyaniya-http-2xx/) - Для отправки кодом статуса HTTP из группы 2хх в ASP.NET Core MVC предусмотрен ряд классов и методов класса Controller, позволяющих отправлять клиенту такие коды как 200, 201, 202 и 204 - [Контроллеры ASP.NET Core MVC. Переадресация](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-pereadresaciya/) - В ASP.NET Core MVC перенаправление может происходить на локальный адрес, внешний адрес, определенный маршрут, определенное действие контроллера. При этом мы можем устанавливать временную или постоянную переадресацию. - [Контроллеры ASP.NET Core MVC. Отправка текста и JSON](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-otpravka-teksta-i-json/) - Для отправки текста клиенту мы можем либо воспользоваться методом контроллера Content(), либо вручную создавать объект ContentResult и передавать его в результате выполнения действия. Для отправки JSON используется метод контроллера Json(), который создает объект JsonResult. Для настройки сериализатора мы можем передавать в метод или конструктор класса JsonResult в качестве второго параметра объект класса JsonSerializerOptions - [Контроллеры ASP.NET Core MVC. Обработка форм](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-obrabotka-form/) - Обработка веб-форм в ASP.NET Core MVC, по большому счёту, ничем не отличается от получения данных контроллером из строки параметров запроса. Мы также можем передавать в формах примитивные типы, массивы, массивы объектов, словари и т.д. Важным является правильное задание значение атрибутов name для полей формы. - [Контроллеры ASP.NET Core MVC. Передача данных в контроллер через параметры запроса](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-peredacha-dannyx-v-kontroller-cherez-parametry-zaprosa/) - С использованием параметров запроса мы можем передавать в контроллер не только примитивные типы (числа, строки), но и сложные объекты, массивы объектов и словари. В каждом конкретном случае используются соглашения по именованию параметров. Например, указание порядкового номера элемента в массиве. - [Контроллеры ASP.NET Core MVC. Контекст контроллера и контекст запроса](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-kontekst-kontrollera-i-kontekst-zaprosa/) - Для доступа к контексту запроса мы можем использовать свойства контроллера HttpContext или ControllerContext. - [Контроллеры ASP.NET Core MVC. Введение](https://csharp.webdelphi.ru/kontrollery-asp-net-core-mvc-vvedenie/) - Что является контроллером в ASP.NET Core MVC, какие методы являются действиями контролера, как действия контролера сопоставляются с шаблоном маршрута - [Введение в ASP.NET Core MVC. Первое приложение в Visual Studio](https://csharp.webdelphi.ru/vvedenie-v-asp-net-core-mvc-pervoe-prilozhenie-v-visual-studio/) - Создадим своё первое приложение ASP.NET Core MVC и посмотрим, какие в этом приложении отличия от тех приложений, которые мы создавали, когда разбирались с базовой моделью ASP.NET Core. - [Общие сведения об ASP.NET Core MVC](https://csharp.webdelphi.ru/asp-net-core-mvc-vvedenie/) - ASP.NET Core MVC - это платформа для создания приложений ASP.NET Core с использованием шаблона MVC, позволяющего разделить всё приложение на три независимые части - контроллер, модель и представление. - [Безопасность в ASP.NET Core. Управление секретами пользователей](https://csharp.webdelphi.ru/bezopasnost-v-asp-net-core-upravlenie-sekretami-polzovatelej/) - Секреты пользователей позволяют в процессе разработки отделить конфиденциальные данные пользователя от основного кода приложения - [Сжатие ответов в ASP.NET Core. Настройки сжатия](https://csharp.webdelphi.ru/szhatie-otvetov-v-asp-net-core-nastrojki-szhatiya/) - При использовании сжатия ответов в ASP.NET Core мы можем указывать MIME-типы данных, которые должны или НЕ должны подвергаться сжатию, а также указывать несколько провайдеров сжатия, приоритет которых будет определяться из положением в коллекции Providers настроек сервиса - [Сжатие ответов в ASP.NET Core. Введение](https://csharp.webdelphi.ru/szhatie-otvetov-v-asp-net-core-vvedenie/) - Сжатие ответов, наряду с кэшированием, позволяет повысить производительность приложения ASP.NET Core. Для включения сжатия необходимо подключить сервисы сжатия и добавить в конвейер обработки запросов middleware для сжатия ответа. - [Кэширование в ASP.NET Core. Распределенное кэширование (IDistributedCache)](https://csharp.webdelphi.ru/keshirovanie-v-asp-net-core-raspredelennoe-keshirovanie-idistributedcache/) - Распределенное кэширование (Distributed Cache) удобно использовать в том случае, если нужен общий кэш для нескольких машин. - [Кэширование в ASP.NET Core. Кэширование вывода (IOutputCacheStore)](https://csharp.webdelphi.ru/keshirovanie-v-asp-net-core-keshirovanie-vyvoda-outputcache/) - В ASP.NET Core предусмотрено кэширование ответов приложения для чего используется сервис IOutputCacheStore и компонент middleware OutputCacheMiddleware - [Кэширование в ASP.NET Core. Кэширование статических файлов](https://csharp.webdelphi.ru/keshirovanie-v-asp-net-core-keshirovanie-staticheskix-fajlov/) - Кэширование статических файлов может значительно повысить производительность вашего веб-приложения в случае, если используется большое количество статических файлов. - [Кэширование в ASP.NET Core. Настройки кэширования в памяти](https://csharp.webdelphi.ru/keshirovanie-v-asp-net-core-nastrojki-keshirovaniya-v-pamyati/) - Для дого, чтобы кэш не разрастался в памяти до неприемлемых размеров мы можем ограничить его размер, используя свойство SizeLimit. Для каждого элемента кэша мы можем настроить различные политики вытеснения - указать абсолютное и скользящее время вытеснения элемента из кэша, приоритет удаления и размер. - [Кэширование в ASP.NET Core. IMemoryCache](https://csharp.webdelphi.ru/keshirovanie-v-asp-net-core-imemorycache/) - Кэширование - это относительно простая и, в тоже время, эффективная концепция в программировании, идея которой состоит в том, чтобы повторно использовать данные, не прибегая к выполнению повторных дорогостоящих операций. - [CORS и кросс-доменные запросы в ASP.NET Core. Политики CORS, глобальная и локальная настройка CORS](https://csharp.webdelphi.ru/cors-i-kross-domennye-zaprosy-v-asp-net-core-politiki-cors-globalnaya-i-lokalnaya-nastrojka-cors/) - Политики содержат набор правил для конфигурирования CORS в вашем приложении ASP.NET Cor и в дальнейшем упростить настройку вашего приложения - [CORS и кросс-доменные запросы в ASP.NET Core. Конфигурация CORS](https://csharp.webdelphi.ru/cors-i-kross-domennye-zaprosy-v-asp-net-core-konfiguraciya-cors/) - CORS и и его конфигурация в ASP.NET Core - [CORS и кросс-доменные запросы в ASP.NET Core. Введение](https://csharp.webdelphi.ru/cors-i-kross-domennye-zaprosy-v-asp-net-core-vvedenie/) - о умолчанию, современные браузеры, в целях безопасности, запрещают кросс-доменные AJAX-запросы, что может вызвать проблемы при взаимодействии приложений ASP.NET Core с другими веб-приложениями. Чтобы разрешить кросс-доменные запросы в ASP.NET Core нам необходимо задействовать CORS - [Аутентификация и авторизация в ASP.NET Core. Аутентификация с помощью cookies](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-autentifikaciya-s-pomoshhyu-cookies/) - Аутентификация с помощью cookies в ASP.NET Core - [Аутентификация и авторизация в ASP.NET Core. Обновление JWT-токена (refresh token)](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-obnovlenie-jwt-tokena-refresh-token/) - помимо защиты нашего приложения от несанкционированного доступа к ресурсам следует также предусмотреть и удобство работы пользователя с системой. И сегодня мы рассмотрим один из вариантов того, как обеспечить повторное получение JWT-токена пользователем без непосредственного ввода учётных данных. - [Аутентификация и авторизация в ASP.NET Core. Создание собственных ограничений авторизации](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-sozdanie-sobstvennyx-ogranichenij-avtorizacii/) - В предыдущей части мы рассмотрели пример авторизации пользователя на основе политик и остановились на том, что, несмотря на то, что встроенные возможности ASP.NET Core позволяют покрыть максимум потребностей разработчиков, всё же иногда необходимо добавить в работу политики авторизации пользователя своё ограничение, например, таковым является ограничение доступа пользователя по его возрасту. - [Аутентификация и авторизация в ASP.NET Core. JWT и политики авторизации](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-jwt-i-politiki-avtorizacii/) - Политики авторизации в ASP.NET Core позволяют создать гибкую систему авторизации пользователей на основе объектов Claim - [Аутентификация и авторизация в ASP.NET Core. JWT и авторизация по ролям](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-jwt-i-avtorizaciya-po-rolyam/) - Часто, для доступа к какому-либо ресурсу приложения недостаточно одного только факта аутентификации пользователя и необходимы дополнительные ограничения, например, авторизация по ролям. ASP.NET Core позволяет осуществлять авторизацию по ролям, используя рассмотренные нами ранее классы Claim, ClaimsPrincipal и ClaimIdentity. - [Аутентификация и авторизация в ASP.NET Core. JWT и объект HttpContext.User](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-jwt-i-obekt-httpcontext-user/) - Одной из задач аутентификации в приложении ASP.NET Core является установка личности пользователя, который представляется в приложении свойством User класса HttpContext - [Аутентификация и авторизация в ASP.NET Core. Авторизация клиента с помощью JWT](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-avtorizaciya-klienta-s-pomoshhyu-jwt/) - Авторизация клиента с помощью JWT в ASP.NET - [Аутентификация и авторизация в ASP.NET Core. Аутентификация на основе JWT-токенов](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-autentifikaciya-na-osnove-jwt-tokenov/) - JWT-токен (Json Web-Token) - это открытый стандарт (RFC 7519), который определяет компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON. - [Аутентификация и авторизация в ASP.NET Core. Основные понятия](https://csharp.webdelphi.ru/autentifikaciya-i-avtorizaciya-v-asp-net-core-osnovnye-ponyatiya/) - Основные сведения об аутентификации и авторизации пользователей в ASP.NET Core - [Статические классы Results и TypedResults в ASP.NET Core. Обзор методов](https://csharp.webdelphi.ru/staticheskie-klassy-results-i-typedresults-v-asp-net-core-obzor-metodov/) - Классы Results и TypedResults позволяют упростить работу с различными кодами статуса HTTP и содержат ряд методов, с помощью которых мы можем отправлять пользователю файлы, сообщать о проблемах и т.д. - [Статические классы Results и TypedResults в ASP.NET Core. Отправка файлов](https://csharp.webdelphi.ru/staticheskie-klassy-results-i-typedresults-v-asp-net-core-otpravka-fajlov/) - Для отправки файлов клиенту мы можем использовать методы File, VirtualFile и PhysicalFile статических классов Results и TypedResults - [Статические классы Results и TypedResults в ASP.NET Core. Отправка кодов состояния HTTP 4xx](https://csharp.webdelphi.ru/staticheskie-klassy-results-i-typedresults-v-asp-net-core-otpravka-kodov-sostoyaniya-http-4xx/) - Статические классы Results и TypedResults предоставляют сразу ряд методов, отправляющих коды состояния HTTP группы 4хх, сообщающих нам о том, что на стороне клиента произошла какая-либо ошибка. При этом, работа метода Forbid() напрямую зависит от настроек сервиса авторизации. - [Статические классы Results и TypedResults в ASP.NET Core. Отправка кодов состояния HTTP 2xx](https://csharp.webdelphi.ru/staticheskie-klassy-results-i-typedresults-v-asp-net-core-otpravka-kodov-sostoyaniya-http-2xx/) - Отправка кодов состояния HTTP 2xx свидетельствует о том, что запрос пользователя успешно обработан. При этом, сервер, использовать различные коды из группы 2хх, чтобы сообщить, что запрос успешный или запрос был принят к исполнению и т.д. В статических классах Results и TypedResults для отправки кодов статуса 2хх могут использоваться семь различных методов - [Статические классы Results и TypedResults в ASP.NET Core. Отправка текста и JSON](https://csharp.webdelphi.ru/staticheskie-klassy-results-i-typedresults-v-asp-net-core-otpravka-teksta-i-json/) - Методы Content, Text и Json классов Results и TypedResults позволяют отправлять пользователю текстовое содержимое. При этом, метод Json сериализует переданный в параметрах метода объект в формат Json и отправляет его в ответе пользователю. - [Обработка ошибок в ASP.NET Core. Обработка ошибок HTTP](https://csharp.webdelphi.ru/obrabotka-oshibok-v-asp-net-core-obrabotka-oshibok-http/) - По умолчанию приложение ASP.NET Core не предоставляет пользователю страницу с кодом состояния HTTP, однако, используя методы UseStatusCodePages, UseStatusCodePagesWithRedirects и UseStatusCodePagesWithReExecute мы можем настроить приложение для вывода пользователю информации об ошибках HTTP - [Конвейер обработки запросов и middleware в ASP.NET Core](https://csharp.webdelphi.ru/konvejer-obrabotki-zaprosov-i-middleware-v-asp-net-core/) - Общие сведения о конвейере запроса в ASP.NET Core. Встроенные компоненты middleware asp.net core - [Обработка ошибок в ASP.NET Core. UseDeveloperExceptionPage и UseExceptionHandler](https://csharp.webdelphi.ru/obrabotka-oshibok-v-asp-net-core-usedeveloperexceptionpage-i-useexceptionhandler/) - Обработка ошибок в ASP.NET Core может происходить по-разному, в зависимости от среды окружения. Так, если приложение находится в стадии разработки, то при возникновении ошибки срабатывает DeveloperExceptionPageMiddleware, который генерирует максимально подробную информацию об ошибке для разработчика. Если же приложение вышло из стадии разработки, то информировать пользователя об ошибке можно, используя компонент middleware ExceptionHandlerMiddleware, который необходимо подключить как можно ближе к началу конвейера обработки запросов. - [Управление состоянием в ASP.NET Core. Сессии](https://csharp.webdelphi.ru/upravlenie-sostoyaniem-v-asp-net-core-sessii/) - Хранение данных пользователя с использованием сессий позволяет задействовать в работе сервера кэш и сохранять не только строки, но и сложные объекты и целочисленные значения - [Получение данных запроса. Работа с HttpRequest](https://csharp.webdelphi.ru/poluchenie-dannyx-zaprosa-rabota-s-httprequest/) - Изучаем HttpRequest: как получить заголовки запроса, как организовать маршрутизацию, получить путь, параметры запроса в ASP.NET Core - [Управление состоянием в ASP.NET Core. Cookies (куки)](https://csharp.webdelphi.ru/upravlenie-sostoyaniem-v-asp-net-core-cookies-kuki/) - Для установки куки на компьютер пользователя необходимо использовать свойство HttpContext.Response.Cookies, а для чтения - свойство IRequestCookieCollection - [Управление состоянием в ASP.NET Core. Хранение данных при обработке одного запроса](https://csharp.webdelphi.ru/upravlenie-sostoyaniem-v-asp-net-core-xranenie-dannyx-pri-obrabotke-odnogo-zaprosa/) - Свойство HttpContext.Items хранит данные, относящиеся к запросу в виде пар "ключ-значение". После обработки запроса все данные из свойства удаляются. HttpContext.Items удобно использовать в том случае, если конвейер обработки запросов состоит из множества компонентов и данные одного middleware требуются для работы в другом. - [Основы логирования в ASP.NET Core. Создание собственного провайдера логирования](https://csharp.webdelphi.ru/osnovy-logirovaniya-v-asp-net-core-sozdanie-sobstvennogo-provajdera-logirovaniya/) - Для разработки своей системы логирования в ASP.NET Core нам необходимо разработать три компонента: класс, реализующий интерфейс ILogger; класс, реализующий интерфейс ILoggerProvider и класс, который добавляет метод расширения к объекту ILoggingBuilder - [Основы логирования в ASP.NET Core. Фильтрация логов и идентификаторы событий](https://csharp.webdelphi.ru/osnovy-logirovaniya-v-asp-net-core-filtraciya-logov-i-identifikatory-sobytij/) - Фильтр логирования задается с помощью метода AddFilter(), который позволяет задать для определенной категории минимальный уровень логгирования - [Основы логирования в ASP.NET Core. Провайдеры и конфигурация логгирования](https://csharp.webdelphi.ru/osnovy-logirovaniya-v-asp-net-core-provajdery-i-konfiguraciya-loggirovaniya/) - Конфигурация системы логирования ASP,NET Core может осуществляться посредствам любого поставщика конфигурации. Одним из наиболее простых способов настройки конфигурации логирования является использование json-файлов. - [Основы логирования в ASP.NET Core. Интерфейс ILogger](https://csharp.webdelphi.ru/osnovy-logirovaniya-v-asp-net-core-interfejs-ilogger/) - Логирование (ведение логов, журналирование) — это процесс записи наиболее значимой информации о работе системы с возможностью быстрого доступа к этой информацией в случае необходимости. - [Конфигурация в ASP.NET Core. Проекция конфигурации на классы C#](https://csharp.webdelphi.ru/konfiguraciya-v-asp-net-core-proekciya-konfiguracii-na-klassy-c/) - Когда мы работаем с файловыми провайдерами конфигурации, то настройки в таких файлах могут иметь достаточно разветвленную структуру. В результате, читать такие настройки по одной становится крайне неудобно. Платформа ASP.NET Core позволяет проецировать конфигурационные настройки на классы C#. - [Конфигурация в ASP.NET Core. Файловые провайдеры конфигурации. Файл JSON, XML и Ini](https://csharp.webdelphi.ru/konfiguraciya-v-asp-net-core-fajlovye-provajdery-konfiguracii-fajl-json-xml-i-ini/) - В отличие от нефайловых провайдеров конфигурации, таких как аргументы командной строки или переменные среды окружения, файловые провайдеры позволяют создавать конфигурации с разветвленной структурой, помещая отдельные настройки в секции и подсекции. Для конфигурации приложения мы можем использовать json-файлы, xml-файлы и ini-файлы. - [Конфигурация в ASP.NET Core. Нефайловые провайдеры конфигурации. Аргументы командной строки](https://csharp.webdelphi.ru/konfiguraciya-v-asp-net-core-nefajlovye-provajdery-konfiguracii-argumenty-komandnoj-stroki/) - В качестве нефайловых провайдеров конфигурации могут выступать параметры командной строки, объекты .NET и переменные среды окружения ASP.NET Core. Рассмотрим использование аргументов командной строки для конфигурации приложения ASP.NET Core - [Конфигурация в ASP.NET Core. Интерфейс IConfiguration](https://csharp.webdelphi.ru/konfiguraciya-v-asp-net-core-interfejs-iconfiguration/) - Конфигурация в ASP.NET Core используется для первоначальной настройки приложения. В качестве источников конфигурации могут использоваться параметры командной строки, файлы различных форматов, а также классы .NET. Для получения доступа к конфигурации мы можем использовать свойство WebApplication.Configuration или использовать механизм DI для запроса сервиса конфигурации - [Маршрутизация в ASP.NET Core. Получение параметров запроса из URL](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-poluchenie-parametrov-zaprosa-iz-url/) - Для работы с параметрами запроса необходимо передать в обработчик конечной точки параметры, которые совпадают по имени с именами параметров в URL. - [Маршрутизация в ASP.NET Core. Создание собственных ограничений маршрутов (интерфейс IRouteConstraint)](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-sozdanie-sobstvennyx-ogranichenij-marshrutov-interfejs-irouteconstraint/) - Для создания собственных ограничений маршрутов мы должны реализоваться интерфейс IRouteConstraint и зарегистрировать полученный тип ограничения с помощью метода ConstraintMap в контейнере DI - [Маршрутизация в ASP.NET Core. Ограничения маршрутов](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-ogranicheniya-marshrutov/) - Как правило, ограничения маршрута применяются для решения того, допустимо ли для параметра маршрута значение, выделенное при парсинге из пути. Вернемся к нашему приложению со списком задач и посмотрим, как можно использовать ограничения маршрутов в ASP.NET Core. - [Маршрутизация в ASP.NET Core. Получение информации о конечных точках в приложении (EndpointDataSource)](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-poluchenie-informacii-o-konechnyx-tochkax-v-prilozhenii-endpointdatasource/) - несколько вариантов получения информации о конечных точках в приложении. Во всех рассмотренных вариантах будет использован сервис, который включен в наше приложение ASP.NET Core по умолчанию - EndpointDataSource. - [Маршрутизация в ASP.NET Core. Конечные точки (endpoints)](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-konechnye-tochki-endpoints/) - маршрутизация в ASP.NET Core - это механизм сопоставления входящих HTTP-запросов с конкретными обработчиками (конечными точками, endpoints) в приложении - [Создание middleware на базе фабрики классов](https://csharp.webdelphi.ru/sozdanie-middleware-na-baze-fabriki-klassov/) - в ASP.NET Core, начиная с версии 2.0 появилась третья возможность создания компонентов middleware - на базе фабрики классов (factory-based middleware). - [Dependency Injection в ASP.NET Core. Жизненный цикл зависимостей](https://csharp.webdelphi.ru/dependency-injection-v-asp-net-core-zhiznennyj-cikl-zavisimostej/) - Выделяются три вида сервисов - transient, scoped и singleton. Чтобы указать время жизни сервиса, при регистрации его в контейнере DI мы должны использовать методы AddTransient, AddScoped или AddSingleton. Для scoped-сервисов обязательно наличие области его действия, которая создается вызовом метода IServiceProvider.CreateScope(). - [Dependency Injection в ASP.NET Core. Способы получения сервисов](https://csharp.webdelphi.ru/dependency-injection-v-asp-net-core-sposoby-polucheniya-servisov/) - В ASP.NET Core зарегистрированные сервисы можно получить различными способами. До этого момента мы использовали только один из способов - путем вызова метода GetService. Сегодня рассмотрим другие возможные способы получения сервисов в ASP.NET Core - [Dependency Injection в ASP.NET Core. Создание сервисов](https://csharp.webdelphi.ru/dependency-injection-v-asp-net-core-sozdanie-servisov/) - разберемся подробнее с разработкой собственных сервисов в ASP.NET Core - [Dependency Injection (внедрение зависимостей) в ASP.NET Core](https://csharp.webdelphi.ru/dependency-injection-vnedrenie-zavisimostej-v-asp-net-core/) - Внедрение зависимостей (Dependency Injection, DI) в .NET является встроенной частью платформы. Это механизм, позволяющий сделать взаимодействующие в приложении объекты слабосвязанными - такие объекты связываются через абстракции (чаще всего - интерфейсы) - [Поддержка обработки статических файлов в ASP.NET Core. Просмотр каталогов на сервере](https://csharp.webdelphi.ru/podderzhka-obrabotki-staticheskix-fajlov-v-asp-net-core-prosmotr-katalogov-na-servere/) - По соображениям безопасности просмотр каталогов в ASP.NET Core отключен по умолчанию. Однако, если необходимо, то мы можем разрешить пользователя просматривать список каталогов и файлов на сервере. - [Поддержка обработки статических файлов в ASP.NET Core. Методы UseStaticFiles и UseDefaultFiles](https://csharp.webdelphi.ru/podderzhka-obrabotki-staticheskix-fajlov-v-asp-net-core-metody-usestaticfiles-i-usedefaultfiles/) - UseStaticFiles и UseDefaultFiles упрощают обработку статических файлов, которые по умолчанию должны находится в папке wwwroot приложения. - [Работа со статическими файлами в ASP.NET Core. Загрузка файлов на сервер](https://csharp.webdelphi.ru/rabota-so-staticheskimi-fajlami-v-asp-net-core-zagruzka-fajlov-na-server/) - Загрузка файлов на сервер в ASP.NET Core немногим сложнее, так как все же для этой операции нам придётся немного вспомнить работу с формами в HTML и научиться отправлять запросы POST на сервер - [Работа со статическими файлами в ASP.NET Core. Метод SendFileAsync](https://csharp.webdelphi.ru/rabota-so-staticheskimi-fajlami-v-asp-net-core-metod-sendfileasync/) - В ASP.NET Core имеются как стандартные компоненты middleware для работы со статическими файлами, так и отдельные методы, определенные в классе HttpResponse предназначенные для этих целей - [Работа с окружением в ASP.NET Core. Интерфейс IWebHostEnvironment](https://csharp.webdelphi.ru/rabota-s-okruzheniem-v-asp-net-core-interfejs-iwebhostenvironment/) - При разработке приложения ASP.NET Core мы можем получать и работать со сведениями об окружении в котором запускается наше приложение. Для этого используется свойство Environment класса WebApplication, которое предоставляет сведения об окружении в виде IWebHostEnvironment. - [Порядок построения конвейера обработки запроса в ASP.NET Core](https://csharp.webdelphi.ru/poryadok-postroeniya-konvejera-obrabotki-zaprosa-v-asp-net-core/) - порядок, в котором компоненты middleware добавляются в файл Program.cs, определяет порядок их вызова при запросах и соблюдать этот порядок крайне важно для обеспечения безопасности, производительности и функциональности. - [Классы middleware в ASP.NET Core](https://csharp.webdelphi.ru/klassy-middleware-v-asp-net-core/) - Учимся создавать middleware в виде классов и внедрять эти компоненты в конвейер запросов ASP.NET Core с использованием методов расширения. - [Создание конвейера запросов в ASP.NET Core. Метод Map](https://csharp.webdelphi.ru/sozdanie-konvejera-zaprosov-v-asp-net-core-metod-map/) - Метод ASP.NET Core Map() позволяет создавать ветки конвейера. Рассматриваем основные моменты по использованию метода Map() - [Создание конвейера запросов в ASP.NET Core с помощью WebApplication. Методы Run и Use](https://csharp.webdelphi.ru/sozdanie-konvejera-zaprosov-v-asp-net-core-s-pomoshhyu-webapplication-metody-run-i-use/) - Создание конвейера запросов в ASP.NET Core с помощью WebApplication. Методы Run и Use - [Основные сведения о классах WebApplication и WebApplicationBuilder](https://csharp.webdelphi.ru/osnovnye-svedeniya-o-klassax-webapplication-i-webapplicationbuilder/) - Основные сведения о классах WebApplication и WebApplicationBuilder - [Первое приложение ASP.NET Core в Visual Studio](https://csharp.webdelphi.ru/pervoe-prilozhenie-asp-net-core-v-visual-studio/) - Первое приложение ASP.NET Core - настройка Visual Studio для ASP.NET Core, создание и запуск пустого приложения - [EF Core - ошибка "Could not load assembly 'XXXX'. Ensure it is referenced by the startup project 'XXXX'"](https://csharp.webdelphi.ru/ef-core-oshibka-could-not-load-assembly-xxxx-ensure-it-is-referenced-by-the-startup-project-xxxx/) - EF Core - ошибка "Could not load assembly 'XXXX'. Ensure it is referenced by the startup project 'XXXX'" - [EF Core. Управление базой данных (миграции)](https://csharp.webdelphi.ru/ef-core-upravlenie-bazoj-dannyx-migracii/) - Миграции - это еще один способ управления базой данных в EF Core, который является предпочтительным при развитии уже готового проекта. Сегодня мы рассмотрим использование миграций в EF Core. - [EF Core. Основные операции с данными (CRUD)](https://csharp.webdelphi.ru/ef-core-osnovnye-operacii-s-dannymi-crud/) - Рассмотрим основные операции с данными: создание (Create), чтение (Read), обновление (Update) и удаление (Delete) в EF . - [EF Core. Управление базой данных (свойство Database контекста)](https://csharp.webdelphi.ru/ef-core-upravlenie-bazoj-dannyx-svojstvo-database-konteksta/) - Создание и удаление базы данных в EF Core: методы EnsureCreated EnsureDeleted - [EF Core. Подключение к существующей базе данных MySQL](https://csharp.webdelphi.ru/ef-core-podklyuchenie-k-sushhestvuyushhej-baze-dannyx-mysql/) - EF Core. Подключение к существующей базе данных MySQL - [Первое приложение Blazor Server с EF Core](https://csharp.webdelphi.ru/pervoe-prilozhenie-blazor-server-s-ef-core/) - Первое приложение Blazor Server с EF Core для работы с MySQL - [Первое приложение EF Core](https://csharp.webdelphi.ru/pervoe-prilozhenie-ef-core/) - Разрабатываем первое консольное приложение, использующее EF Core и MySQL в C - [Entity Framework Core 7 (EF Core). Введение](https://csharp.webdelphi.ru/entity-framework-core-7-ef-core-vvedenie/) - Введение в работу с EF Core: что необходимо знать, как работает EF Core - [Лабораторная работа по C#. Создание и реализация класса "Матрица MxN"](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-sozdanie-i-realizaciya-klassa-matrica-mxn/) - Задача: Создать класс «Матрица MxN». Реализовать инициализацию элементов матрицы случайными числами, вывод транспонированной матрицы, нахождение среднего арифметического всех элементов, а также вывод информации об объекте. - [Лабораторная работа по C#. Перенаправление потоков ввода-вывода](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-perenapravlenie-potokov-vvoda-vyvoda/) - Лабораторная работа по C# на перенаправление потоков ввода-вывода консоли и выполнение элементарных вычислений - [Сортировка массива C#. Алгоритм "Сортировка выбором"](https://csharp.webdelphi.ru/sortirovka-massiva-c-algoritm-sortirovka-vyborom/) - В статье рассматривается реализация алгориnма сортировки выбором массив в c# - [Алгоритм перевода чисел из арабской системы в римскую и обратно](https://csharp.webdelphi.ru/algoritm-perevoda-chisel-iz-arabskoj-sistemy-v-rimskuyu-i-obratno/) - Как известно, в римской системе счисления для обозначения цифр используются комбинации букв латинского алфавита - I, II, III, IV и т.д. В этой статье рассмотрим один из вариантов алгоритма перевода числа из арабской системы в римскую и обратно. - [SQLite.NET CRUD - основные операции с данными в SQLite](https://csharp.webdelphi.ru/sqlite-net-crud-osnovnye-operacii-s-dannymi-v-sqlite/) - Основные операции с данными в SQLite.NET C#: создание, редактирования, чтение, удаление записей sqlite c - [Лабораторная работа по C#. Перевод числа из десятичной системы в двоичную](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-perevod-chisla-iz-desyatichnoj-sistemy-v-dvoichnuyu/) - Лабораторная работы по C# с решением: перевод числа из десятичной системы в двоичную с использованием стека и рекурсии - [SQLite.NET — использование PRAGMA](https://csharp.webdelphi.ru/sqlite-net-ispolzovanie-pragma/) - Работа с командами PRAGMA в SQLite - [Компоненты Blazor для форм: InputText, InputNumber, InputCheckbox, InputDate.](https://csharp.webdelphi.ru/komponenty-blazor-dlya-form-inputtext-inputnumber-inputcheckbox-inputdate/) - Компоненты ввода InputText, InputNumber, InputCheckbox и InputDate в Blazor - [C#, .NET Core и Excel: начало работы](https://csharp.webdelphi.ru/c-net-core-i-excel-nachalo-raboty/) - Работа с Microsoft Excel в C# и .NET Core: создавать процесс Microsoft Excel в C#, создавать рабочую книгу, записывать текст в ячейки листа Excel и корректно освобождать память после работы с Excel в C# - [C# и Excel - "зависающий" в памяти процесс Microsoft Excel](https://csharp.webdelphi.ru/c-i-excel-zavisayushhij-v-pamyati-process-microsoft-excel/) - Разбираемся почему в памяти остается процесс Excel после того, как приложение C# выполнило работу и закрыто - [SQLite.NET - библиотека для работы с базами данных SQLite в C#](https://csharp.webdelphi.ru/sqlite-net-biblioteka-dlya-raboty-s-bazami-dannyx-sqlite-v-c/) - SQLite.NET- это небольшая библиотека для работы с базами данных SQLite в C#, разработанная с использованием ORM-технологии - [Blazorise - компоненты Blazor для Bootstrap. Введение](https://csharp.webdelphi.ru/blazorise-komponenty-blazor-dlya-bootstrap-vvedenie/) - Blazorise - это библиотека из более 80 различных компонентов, позволяющих использовать всю мощь Bootstrap и, при этом, оперировать известными программисту C# терминами и понятиями. - [Хранение настроек в Blazor Hybrid. Интерфейс IPreferences](https://csharp.webdelphi.ru/xranenie-nastroek-v-blazor-hybrid-interfejs-ipreferences/) - Учимся сохранять настройки приложения Blazor Hybrid, используя возможности интерфейса IPreferences - [Конфигурация приложений Blazor с использованием JSON-файлов](https://csharp.webdelphi.ru/konfiguraciya-prilozhenij-blazor-s-ispolzovaniem-json-fajlov/) - Чтение конфигурации приложения Blazor Server из json (appsettings.json), регистрация своего провайдера конфигурации - [Конфигурация приложений Blazor с использованием командной строки](https://csharp.webdelphi.ru/konfiguraciya-prilozhenij-blazor-s-ispolzovaniem-komandnoj-stroki/) - Рассматриваем вопросы как задавать начальную конфигурацию приложения с использованием аргументов командной строки (args)/ - [Обработка событий в Blazor](https://csharp.webdelphi.ru/obrabotka-sobytij-v-blazor/) - Обработка событий в Blazor - [Как получить свой IP-адрес на C#](https://csharp.webdelphi.ru/kak-poluchit-svoj-ip-adres-na-c/) - Как получить свой IP-адрес на C# - [Лабораторная работа по C#. Рекурсия. Числа Фибоначчи](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-rekursiya-chisla-fibonachchi/) - Лабораторная работа по C#. Рекурсия. Числа Фибоначчи - [Алгоритм нахождения последовательностей чисел в C#](https://csharp.webdelphi.ru/algoritm-naxozhdeniya-posledovatelnostej-chisel-v-c/) - Необходимо найти и вывести на экран все последовательности длины N из чисел 1,2,...,M. Алгоритм реализован на языке C# - [Параллельное программирование в C#: создание и выполнение задач (Task)](https://csharp.webdelphi.ru/parallelnoe-programmirovanie-v-c-sozdanie-i-vypolnenie-zadach-task/) - Задачи при параллельном программировании в C# с библиотекой TPL. Task позволяет просто и понятно организовать параллельное выполнение нескольких задач в программе, не прибегая к использованию потоков (Thread). - [Совместное использование данных дочерними и родительскими компонентами в Blazor](https://csharp.webdelphi.ru/sovmestnoe-ispolzovanie-dannyx-dochernimi-i-roditelskimi-komponentami-v-blazor/) - Используем EventCallback для совместного использования данных дочерними и родительскими компонентами в Blazor - [Проект Blazor WebAssembly "Open Ecology". Шаблон приложения](https://csharp.webdelphi.ru/proekt-blazor-webassembly-open-ecology-shablon-prilozheniya/) - Изменяем стандартный шаблон WebAssembly для дальнейшей работы над проектом "Открытая экология" - изменяем стиль меню, добавляем описание проекта - [Проект Blazor WebAssembly «Open Ecology». Работа с большим JSON](https://csharp.webdelphi.ru/proekt-blazor-webassembly-open-ecology-servis-zagruzki-json/) - Учимся создавать компоненты Razor для Blazor WebAssembly и парсить большие JSON в C - [Проект Blazor WebAssembly «Open Ecology». База данных и постраничный вывод результатов](https://csharp.webdelphi.ru/proekt-blazor-webassembly-open-ecology-baza-dannyx-i-postranichnyj-vyvod-rezultatov/) - Рассматриваем организацию работы приложения Blazor WASM с базой данных MySQL - [Алгоритм обхода дерева каталогов в C# с использованием рекурсии](https://csharp.webdelphi.ru/algoritm-obxoda-dereva-katalogov-v-c-s-ispolzovaniem-rekursii/) - Рассматриваем алгоритм обхода дерева каталогов в C# с использованием рекурсии - [Алгоритм обхода дерева каталогов в C# без рекурсии](https://csharp.webdelphi.ru/algoritm-obxoda-dereva-katalogov-v-c-bez-rekursii/) - Реализуем в C# алгоритм обхода дерева папок без использования рекурсивных методов, используя основные методы работы со стеком - [Лабораторная работа по C#. Работа с массивами](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-rabota-s-massivami/) - Задача: даны два массива a и b размерностью n и m соответственно, сформировать массив c таким образом, что первая часть - отсортированный по возрастанию массив а, а вторая часть - отсортированный по убыванию массив b. - [Лабораторная работа по C#. Удаление символов из строки](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-udalenie-simvolov-iz-stroki/) - напишите программу на C#, которая удаляет символ в заданной позиции из заданной строки. Заданная позиция находится в диапазоне 0 до [длина строки -1] включительно - [Лабораторная работа по C#. Арифметические операции](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-arifmeticheskie-operacii/) - напишите программу на C#, которая рассчитывает абсолютную разность между n и числом 48. Если n больше 48, то верните тройную абсолютную разность. - [Лабораторная работа по C#. Основы С#](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-osnovy-s/) - напишите программу на C#, которая вычисляет сумму двух заданных целочисленных значений. Если два заданных значения равны, то вернуть двойную сумму. - [Лабораторная работа по C#. Классы](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-klassy/) - В этой лабораторной работе мы научились создавать собственные классы и переопределять методы базового класса. - [Лабораторная работа по C#. Работа с исключениями](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-rabota-s-isklyucheniyami/) - Составить программу деления вещественных чисел. программа должна выполнять обработку исключений c использованием конструкции try … catch, и выдавать следующие сообщения о характере ошибки: не введено число (с помощью оператора условия); введено слишком длинное число (с помощью оператора условия); деление на ноль; ошибка преобразования. - [Работа с SQLite в C# (.NET 5)](https://csharp.webdelphi.ru/rabota-s-sqlite-v-c-net-5/) - Рассматриваем основные операции для работы с БД SQLite в C#: создание соединения, создание таблиц, запись и чтение данных из БД SQLite - [Тонкости работы с числами в C#](https://csharp.webdelphi.ru/tonkosti-raboty-s-chislami-v-c/) - Рассматриваем вопросы работы с числами в C# - переполнение, приведение типов данных, использование суффиксов для числовых литералов - [Практика Blazor: приложение "Часы"](https://csharp.webdelphi.ru/praktika-blazor-prilozhenie-chasy/) - Практика Blazor: приложение "Часы". Разрабатываем приложение, показывающее время в режиме реального времени - [Компоненты Bootstrap в Blazor. Компонент Progress](https://csharp.webdelphi.ru/komponenty-bootstrap-v-blazor-progress/) - Разрабатываем свой собственный компонент для показа прогресса длительной операции в Blazor, используя в качестве основы компонент Progress Bootstrap - [Компоненты Bootstrap](https://csharp.webdelphi.ru/komponenty-bootstrap/) - В статье рассматриваются отдельные компоненты Bootstrap - фрейворка, включенного в состав Blazor по умолчани - [Фреймворк Bootstrap в Blazor](https://csharp.webdelphi.ru/frejmvork-bootstrap-v-blazor/) - Bootstrap в Blazor: контейнеры и сетки, позиционирование элементов и отступы в bootstrap - [Blazor .NET 6 и обработка ошибок. Компонент ErrorBoundary](https://csharp.webdelphi.ru/blazor-net-6-i-obrabotka-oshibok-komponent-errorboundary/) - ErrorBoundary - компонент для указания границ ошибок в приложениях Blazor - [Управление состоянием в Blazor Server. Использование хранилища браузера sessionStorage](https://csharp.webdelphi.ru/upravlenie-sostoyaniem-v-blazor-sessionstorage-server-ispolzovanie-xranilishha-brauzera/) - Учимся использовать sessionStorage браузера при разработке приложений Blazor Server - [Валидация форм в Blazor Server](https://csharp.webdelphi.ru/validaciya-form-v-blazor-server/) - Рассматриваем различные варианты валидации формы в Blazor Server, а также использование свойство EditContext для более гибкого управления процессом валидации - [Компоненты Blazor для форм: InputSelect, InputRadio, InputTextArea](https://csharp.webdelphi.ru/komponenty-blazor-dlya-form-inputselect-inputradio-inputtextarea/) - Рассматриваем компоненты ввода InputSelect, InputRadio, InputRadioGroup и InputTextArea в Blazor - [Работа с формами в Blazor (компонент EditForm)](https://csharp.webdelphi.ru/rabota-s-formami-v-blazor-komponent-editform/) - EditForm - специальный компонент Blazor для работы с формами в приложении. Компонент поддерживает валидацию модели с использованием атрибутов и вывод списка ошибок без прямого использования js - [Применение макетов Blazor](https://csharp.webdelphi.ru/primenenie-maketov-blazor/) - Макеты в Blazor можно применять не только к отдельным областям приложения, но и к отдельным компонентам и даже частям этих компонентов - [Макеты в Blazor](https://csharp.webdelphi.ru/makety-v-blazor/) - Структура макета Blazor. Учимся создавать макеты для отдельных областей приложения Blazor Server - [Code-behind в Blazor](https://csharp.webdelphi.ru/code-behind-v-blazor/) - Учимся разделять логику компонента Blazor и его разметку - [Динамические компоненты Blazor (DynamicComponent)](https://csharp.webdelphi.ru/dinamicheskie-komponenty-blazor-dynamiccomponent/) - Одним из нововведений в Blazor .NET 6 стала возможность использовать динамические компоненты (DynamicComponent). Рассматриваем работу с динамическими компонентами в Blazor - [Жизненный цикл компонента Blazor](https://csharp.webdelphi.ru/zhiznennyj-cikl-komponenta-blazor/) - Жизненный цикл компонента Blazor можно использовать для инициализации состояния компонента и/или реализации расширенного поведения компонентов. - [Многократное использование компонентов Blazor](https://csharp.webdelphi.ru/mnogokratnoe-ispolzovanie-komponentov-blazor/) - Компоненты Blazor - это самодостаточные элементы приложения, которые мы можем многократно использовать в наших приложениях Blazor - [Запрет действий по умолчанию](https://csharp.webdelphi.ru/zapret-dejstvij-po-umolchaniyu/) - Blazor: как запретить выполнение действий по умолчанию в браузере - [Обработка событий дочерних компонентов Blazor](https://csharp.webdelphi.ru/obrabotka-sobytij-dochernix-komponentov-blazor/) - Для того, чтобы родительский компонент мог обрабатывать события дочернего компонента, дочерний компонент должен объявить публичное свойство-параметр типа EventCallback или его типизированный вариант - EventCallback - [Привязка данных в Blazor](https://csharp.webdelphi.ru/privyazka-dannyx-v-blazor/) - Привязка данных в Blazor осуществляется с использованием директив @bind, @bind:event и @bind:format - [Каскадные параметры в Blazor](https://csharp.webdelphi.ru/kaskadnye-parametry-v-blazor/) - Рассматриваем использование каскадных параметров для компонентов Blazor - [Передача набора атрибутов компонентам в Blazor](https://csharp.webdelphi.ru/peredacha-nabora-atributov-komponentam-v-blazor/) - Для передачи компоненту Blazor произвольного набора атрибутов используется директива @attributes, со значением Dictionary . Чтобы дочерний компонент мог принимать набор атрибутов от родительского, необходимо использовать свойство CaptureUnmatchedValues = true у атрибута [Parameter] свойства компонента. - [Компоненты Blazor](https://csharp.webdelphi.ru/komponenty-blazor/) - Сегодня разбираемся с тем, что из себя представляют компоненты Blazor, создаем свой первый компонент Blazor и используем его в нашем проекте Blazor Server. - [Навигация в ASP.NET Core Blazor. NavigationManager](https://csharp.webdelphi.ru/navigaciya-v-blazor-navigationmanager/) - Использование NavigationManager в Blazor для навигации по страницам приложения - [Использование параметров URL в Blazor](https://csharp.webdelphi.ru/ispolzovanie-parametrov-url-v-blazor/) - Используем NavigationManager и атрибут SupplyParameterFromQuery для работы с параметрами URL в Blazor - [Маршрутизация в ASP.NET Core Blazor](https://csharp.webdelphi.ru/marshrutizaciya-v-asp-net-core-blazor/) - как организована маршрутизация в приложениях в ASP.NET Core Blazor: компонент Router, параметры и ограничения параметров в Blazor - [Основы Razor](https://csharp.webdelphi.ru/osnovy-razor/) - Razor - это достаточно простой и понятный язык разметки, с помощью которого мы можем совмещать в одном файле и HTML и код C#. Изучаем основы Razor. - [Приложения Blazor Hybrid](https://csharp.webdelphi.ru/prilozheniya-blazor-hybrid/) - Структура проекта Blazor Hybrid. Запуск приложения Blazor Hybrid в Windows и Android - [Структура проекта ASP.NET Core Blazor Server](https://csharp.webdelphi.ru/struktura-proekta-asp-net-core-blazor-server/) - из чего состоит шаблон приложения Blazor Server - какие папки и файлы располагаются в корневой директории приложения, за что они отвечают и что содержат - [Первое приложение Blazor Server в VS Code](https://csharp.webdelphi.ru/pervoe-prilozhenie-blazor-server-v-vs-code/) - Знакомимся с Visual Studio Code: настройка для работы с .NET C#, установка расширений для Blazor. - [Введение в Blazor](https://csharp.webdelphi.ru/vvedenie-v-blazor/) - Blazor - это фреймворк, позволяющий разрабатывать веб-приложения, которые могут работать как на стороне сервера, так и на стороне клиента - [[РЕШЕНО] Visual Studio 2022: проект не знает, как запустить профиль XXX](https://csharp.webdelphi.ru/resheno-visual-studio-2022-proekt-ne-znaet-kak-zapustit-profil-xxx/) - [РЕШЕНО] Visual Studio 2022: проект не знает, как запустить профиль XXX - [Visual Studio 2019 "зависает" на открытии файла. Решение проблемы](https://csharp.webdelphi.ru/visual-studio-2019-zavisaet-na-otkrytii-fajla-reshenie-problemy/) - Visual Studio 2019 «зависает» на открытии файла. Решение проблемы - [C# WinForms: как в ListView узнать, что пользователь кликнул по определенной области элемента?](https://csharp.webdelphi.ru/c-winforms-kak-v-listview-uznat-chto-polzovatel-kliknul-po-opredelennoj-oblasti-elementa/) - как в ListView узнать, что пользователь кликнул по определенной области элемента? - [Лабораторная работа по C#. Вычисление первых n элементов последовательности](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-vychislenie-pervyx-n-elementov-posledovatelnosti/) - Вычисление первых n элементов последовательности - [Лабораторная работа по C#. Абстрактные классы](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-abstraktnye-klassy/) - создать абстрактный класс Edition с методами позволяющим вывести на экран информацию об издании и определить является ли данное издание искомым. Создать производные классы Book, Article, Ebook. Создать массив из n изданий, вывести полную информацию из каталога, а также организовать поиск изданий по фамилии автора - [Лабораторная работа по C#. Определить частоту чисел в массиве (LINQ)](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-opredelit-chastotu-chisel-v-massive-linq/) - задан массив целых чисел. Необходимо: 1) вывести на экран уникальные числа из массива и частоту с которой эти числа встречаются в массиве; 2) вывести N самых часто встречающихся в массиве чисел - [Лабораторная работа по C#. Работа со структурами](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-rabota-so-strukturami/) - В лабораторной работе C# рассмотрен пример работы с массивом структур, сортировка массива структур и использование LINQ - [Свойства размеров и позиционирования элементов WPF](https://csharp.webdelphi.ru/svojstva-razmerov-i-pozicionirovaniya-elementov-wpf/) - Свойства элементов WPF, установка ширины и высоты, выравнивание по горизонтали (HorizontalAlignment) и вертикали (VerticalAlignment), внешние отступы margin, zindex - [Сортировка массива C#. Алгоритм «Сортировка пузырьком»](https://csharp.webdelphi.ru/sortirovka-massiva-c-algoritm-sortirovka-puzyrkom/) - Реализация алгоритма сортировки пузырьком в C# - [Лабораторная работа по C#. Сортировка двумерного массива методом пузырька](https://csharp.webdelphi.ru/laboratornaya-rabota-po-c-sortirovka-dvumernogo-massiva-metodom-puzyrka/) - Представлен исходный код программы для сортировки массива пузырьковым алгоритмом (метод пузырька) двумерного массива по строкам и по столбцам - [Лабораторная работа №4 «Создание массива»](https://csharp.webdelphi.ru/laboratornaya-rabota-4-sozdanie-massiva/) - Учимся создавать массивы из последовательностей чисел, используя обобщенные типы и методы расширения LINQ - [Поиск наибольшей повторяющейся последовательности символов](https://csharp.webdelphi.ru/poisk-naibolshej-povtoryayushhejsya-posledovatelnosti-simvolov/) - Реализуем алгоритм поиска наибольшей повторяющейся последовательности в двух строках с использованием языка программирования c - [Алгоритмы поиска простых чисел в C#](https://csharp.webdelphi.ru/algoritmy-poiska-prostyx-chisel-v-c/) - рассмотрели алгоритм поиска простых чисел и реализовали этот алгоритм в C#. В зависимости от условий задачи, мы использовали различные виды циклов для поиска набора простых чисел. - [Алгоритм вычисления площади многоугольника](https://csharp.webdelphi.ru/algoritm-vychisleniya-ploshhadi-mnogougolnika/) - Реализация алгоритма расчёта площади многоугольника заданного в виде упорядоченного набора координат его вершин. Для реализации алгоритма в C# использован двусвязный список - [Как создать уникальный идентификатор в C#?](https://csharp.webdelphi.ru/kak-sozdat-unikalnyj-identifikator-v-c/) - Рассматриваем способы того, как в C# создать уникальный идентификатор (ID). Рассмотрены способы с использованием Guid, DateTime.Tiks и генерация ID типа YouTube - [Как прочитать multipart/form-data в C#](https://csharp.webdelphi.ru/kak-prochitat-multipart-form-data-v-c/) - При работе в C# с различными протоколами, позволяющими передавать бинарные данные по Сети, часто возникает необходимость обрабатывать т.н. составное содержимое. Чаще всего, при работе с HTTP бинарные данные отправляются на сервер методом POST и используется Mime-тип multipart/form-data. В этой заметке рассмотрен один из возможных вариантов чтения (парсинга) multipart/form-data в C#. Для чтения multipart/form-data в C# мыВ этой заметке рассмотрен один из возможных вариантов чтения (парсинга) multipart/form-data в C#. - [Visual Studio C# FAQ: как в Visual Studio добавить в Панель элементов (Toolbox) установленные компоненты?](https://csharp.webdelphi.ru/visual-studio-c-faq-kak-v-visual-studio-dobavit-v-panel-elementov-toolbox-ustanovlennye-komponenty/) - В статье рассматривается вопрос добавления новых элементов управления (компонентов) в панель элементов (toolbox) Visual Studio: как добавить компонент в проект и в toolbox - [WPF: работа с ListBox](https://csharp.webdelphi.ru/wpf-rabota-s-listbox/) - В статье рассматриваются основные моменты по работе с ListBox в WPF: создание ListBox, получение доступа к ListBoxItem, загрузка данных в ListBox из xml - [Сортировка массива C#. Алгоритм «Сортировка вставками»](https://csharp.webdelphi.ru/sortirovka-massiva-c-algoritm-sortirovka-vstavkami/) - Реализация алгоритма сортировки вставками в C# - [Сортировка массива C#. Алгоритм «Гномья сортировка»](https://csharp.webdelphi.ru/sortirovka-massiva-c-algoritm-gnomya-sortirovka/) - Реализация алгоритма гномьей сортировки массива в C# - [Сортировка массива C#. Алгоритм «Сортировка перемешиванием»](https://csharp.webdelphi.ru/sortirovka-massiva-c-algoritm-sortirovka-peremeshivaniem/) - Реализация алгоритма сортировки перемешиванием (шейкерной, двунаправленной пузырьковой) массива целых чисел C# - [Перенос консольного приложения c .NET Framework 4.7.2 на NET Core 3.1](https://csharp.webdelphi.ru/perenos-konsolnogo-prilozheniya-c-net-framework-4-7-2-na-net-core-3-1/) - Инструкция по переносу консольного приложения c .NET Framework 4.7.2 на NET Core 3.1 ## Страницы - [Добро пожаловать на сайт "Платформа .NET и C# от А до Я"](https://csharp.webdelphi.ru/) - программирование в c#, уроки c#, учебник c#, си шарп для начинающих, примеры c#, примеры си шарп, blazor, asp.net, asp.net core, asp.net core mvc, c# - [Windows Presentation Foundation (WPF)](https://csharp.webdelphi.ru/windows-presentation-foundation-wpf/) - Подробное руководство по разработке приложений WPF в C# - [Учебник по C#](https://csharp.webdelphi.ru/uchebnik-po-c/) - Учебник C# содержит материалы необходимые для изучения основ C# - [](https://csharp.webdelphi.ru/522-2/) - программирование в c#, уроки c#, учебник c#, си шарп для начинающих, примеры c#, примеры си шарп, blazor, asp.net, asp.net core, asp.net core mvc, c# - [Алгоритмы](https://csharp.webdelphi.ru/uchebnik-po-c/algoritmy/) - Алгоритмы, реализованные на языке C#: сортировка массивов, обход дерева каталогов, работа с последовательностями - [Entity Framework Core (EF Core)](https://csharp.webdelphi.ru/entity-framework-core-ef-core/) - Entity Framework Core (EF Core) учебное пособие - [Лабораторные работы по C#](https://csharp.webdelphi.ru/uchebnik-po-c/laboratornye-raboty-po-c/) - Выполнение лабораторных работ по C# - описание задачи, постановка целей и задач работы, решение на языке C - [С чего начать изучение C# и .NET?](https://csharp.webdelphi.ru/s-chego-nachat-izuchenie-c-i-net/) - С чего начать изучение C# и .NET? - [Подробное руководство по .NET MAUI](https://csharp.webdelphi.ru/net-maui/rukovodstvo-po-net-maui/) - Подробное руководство по разработке приложений на .NET MAUI, включая MVVM и работу с данными - [.NET MAUI](https://csharp.webdelphi.ru/net-maui/) - подробное руководство по разработке приложений на .NET MAUI, включая mvvm и работу с данными - [SOLID](https://csharp.webdelphi.ru/solid/) - SOLID в C# и .NET: руководство по SOLID в C - [Blazor Hybrid](https://csharp.webdelphi.ru/net-maui/blazor-hybrid/) - Руководство по Blazor Hybrid - [ASP.NET Core Web API](https://csharp.webdelphi.ru/asp-net-core-2/asp-net-core-web-api/) - Полное Руководство по ASP.NET Core Web API - [Blazor](https://csharp.webdelphi.ru/asp-net-core-2/blazor/) - Учебник по работе с Blazor - [ASP.NET Core MVC](https://csharp.webdelphi.ru/asp-net-core-2/asp-net-core-mvc/) - ASP.NET Core MVC учебное пособие - [ASP.NET Core Minimal API](https://csharp.webdelphi.ru/asp-net-core-2/asp-net-core/) - Учебник по ASP.NET Core Minimal API в C#: основы ASP.NET Core, работа с конвейеров запросов, разработка сервисов и многое другое - [ASP.NET Core](https://csharp.webdelphi.ru/asp-net-core-2/) - ASP.NET Core — это современная высокопроизводительная среда веб-разработки для .NET, работающая на платформе Windows, Linux и macOS, впервые выпущенная Microsoft в 2016 году - [Популярное](https://csharp.webdelphi.ru/populyarnoe/) - Топ-10 статей блога - самые популярные статьи блога за последний месяц и з всё время его существования - [About](https://csharp.webdelphi.ru/about/) - Информация о блоге csharp.webdelphi.ru - [Классы и структуры .NET](https://csharp.webdelphi.ru/klassy-i-obekty-net/) - Классы и объекты .NET - перечень классов и объектов платформы .NET, которые рассматривались в блоге "Из Delphi в C#" - [WPF](https://csharp.webdelphi.ru/wpf/) - Учебник по WPF на русском - [Карта сайта](https://csharp.webdelphi.ru/karta-sajta/) - Список всех статей блога "Из Delphi в C#" - [Глоссарий](https://csharp.webdelphi.ru/terms-dictionary/) - Описание ключевых слов и модификаторов C# со ссылками на примеры их использования в программном коде ## Рубрики - [Алгоритмы](https://csharp.webdelphi.ru/category/algorithm/) - [Учебник C#](https://csharp.webdelphi.ru/category/osnovy-c/) - [Руководства](https://csharp.webdelphi.ru/category/rukovodstva/) - [XAML](https://csharp.webdelphi.ru/category/xaml/) - [WPF](https://csharp.webdelphi.ru/category/wpf/) - [Лабораторные работы по C#](https://csharp.webdelphi.ru/category/osnovy-c/laboratornye-raboty-po-c/) - [ASP.NET Blazor](https://csharp.webdelphi.ru/category/asp-net-blazor/) - [Введение в Blazor](https://csharp.webdelphi.ru/category/asp-net-blazor/vvedenie-v-blazor/) - [Маршрутизация и навигация в Blazor](https://csharp.webdelphi.ru/category/asp-net-blazor/marshrutizaciya-i-navigaciya-v-blazor/) - [Компоненты Blazor](https://csharp.webdelphi.ru/category/asp-net-blazor/komponenty-blazor/) - [Макеты Blazor](https://csharp.webdelphi.ru/category/asp-net-blazor/makety-blazor/) - [Работа с формами в Blazor](https://csharp.webdelphi.ru/category/asp-net-blazor/rabota-s-formami-v-blazor/) - [Управление состоянием](https://csharp.webdelphi.ru/category/asp-net-blazor/upravlenie-sostoyaniem/) - [Обработка ошибок в Blazor](https://csharp.webdelphi.ru/category/asp-net-blazor/obrabotka-oshibok-v-blazor/) - [Bootstrap в Blazor](https://csharp.webdelphi.ru/category/asp-net-blazor/bootstrap-v-blazor/) - [Практика](https://csharp.webdelphi.ru/category/asp-net-blazor/praktika/) - [Конфигурация приложения](https://csharp.webdelphi.ru/category/asp-net-blazor/konfiguraciya-prilozheniya/) - [help](https://csharp.webdelphi.ru/category/help/) - [Entity Framework Core](https://csharp.webdelphi.ru/category/entity-framework-core/) - [ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/) - [Введение в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/vvedenie-v-asp-net-core/) - [Основы ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/osnovy-asp-net-core/) - [Статические файлы в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/staticheskie-fajly-v-asp-net-core/) - [Dependency Injection в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/dependency-injection-v-asp-net-core/) - [Маршрутизация в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/marshrutizaciya-v-asp-net-core/) - [Конфигурация в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/konfiguraciya-v-asp-net-core/) - [Ведение журналов (логирование)](https://csharp.webdelphi.ru/category/asp-net-core/vedenie-zhurnalov-logirovanie/) - [Управление состоянием в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/upravlenie-sostoyaniem-v-asp-net-core/) - [Обработка ошибок в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/obrabotka-oshibok-v-asp-net-core/) - [Статические классы Results и TypedResults в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/staticheskie-klassy-results-i-typedresults-v-asp-net-core/) - [Аутентификация и авторизация в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/autentifikaciya-i-avtorizaciya-v-asp-net-core/) - [CORS и кросс-доменные запросы в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/cors-i-kross-domennye-zaprosy-v-asp-net-core/) - [Кэширование в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/keshirovanie-v-asp-net-core/) - [Сжатие ответов в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/szhatie-otvetov-v-asp-net-core/) - [Безопасность в ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core/bezopasnost-v-asp-net-core/) - [ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/) - [Введение в ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/vvedenie-v-asp-net-core-mvc/) - [Контроллеры ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/kontrollery-asp-net-core-mvc/) - [Представления в ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/predstavleniya-v-asp-net-core-mvc/) - [Модели в ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/modeli-v-asp-net-core-mvc/) - [Маршрутизация в ASP.NET Core MVC.](https://csharp.webdelphi.ru/category/asp-net-core-mvc/marshrutizaciya-v-asp-net-core-mvc/) - [Фильтры в ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/filtry-v-asp-net-core-mvc/) - [Tag-хэлперы в ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/tag-xelpery-v-asp-net-core-mvc/) - [Компоненты представлений в ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/komponenty-predstavlenij-v-asp-net-core-mvc/) - [Аутентификация и авторизация в ASP.NET Core MVC](https://csharp.webdelphi.ru/category/asp-net-core-mvc/autentifikaciya-i-avtorizaciya-v-asp-net-core-asp-net-core-mvc/) - [Глава 1. Знакомство с C#](https://csharp.webdelphi.ru/category/osnovy-c/chast-1-znakomstvo-s-c/) - [Глава 2. Основы языка C#](https://csharp.webdelphi.ru/category/osnovy-c/chast-2-osnovy-yazyka-c/) - [Глава 4. Методы в C#](https://csharp.webdelphi.ru/category/osnovy-c/chast-3-metody-v-c/) - [Глава 3. Консольные приложения](https://csharp.webdelphi.ru/category/osnovy-c/chast-4-konsolnye-prilozheniya/) - [Глава 5. Классы и объекты](https://csharp.webdelphi.ru/category/osnovy-c/chast-5-klassy-i-obekty/) - [Глава 9. Интерфейсы](https://csharp.webdelphi.ru/category/osnovy-c/chast-6-interfejsy/) - [Глава 8. Делегаты и события](https://csharp.webdelphi.ru/category/osnovy-c/chast-7-delegaty-i-sobytiya/) - [Глава 6. Обработка исключений](https://csharp.webdelphi.ru/category/osnovy-c/chast-8-obrabotka-isklyuchenij/) - [Глава 11. Работа со строками](https://csharp.webdelphi.ru/category/osnovy-c/chast-9-rabota-so-strokami/) - [Глава 13. Дата и время](https://csharp.webdelphi.ru/category/osnovy-c/chast-10-data-i-vremya/) - [Глава 7. Универсальные шаблоны (generics)](https://csharp.webdelphi.ru/category/osnovy-c/chast-11-universalnye-shablony-generics/) - [Глава 15. Рефлексия](https://csharp.webdelphi.ru/category/osnovy-c/chast-12-refleksiya/) - [Глава 16. Основы LINQ](https://csharp.webdelphi.ru/category/osnovy-c/chast-13-osnovy-linq/) - [Глава 14. Работа с файловой системой](https://csharp.webdelphi.ru/category/osnovy-c/chast-14-rabota-s-fajlovoj-sistemoj/) - [Глава 12. Работа с JSON](https://csharp.webdelphi.ru/category/osnovy-c/chast-15-rabota-s-json/) - [Глава 17. Многопоточность](https://csharp.webdelphi.ru/category/osnovy-c/chast-16-mnogopotochnost/) - [Глава 18. Параллельное программирование](https://csharp.webdelphi.ru/category/osnovy-c/chast-17-parallelnoe-programmirovanie/) - [Глава 21. Валидация модели](https://csharp.webdelphi.ru/category/osnovy-c/chast-18-validaciya-modeli/) - [Глава 20. Асинхронное программирование](https://csharp.webdelphi.ru/category/osnovy-c/chast-19-asinxronnoe-programmirovanie/) - [Глава 19. Parallel LINQ в C#](https://csharp.webdelphi.ru/category/osnovy-c/chast-20-parallel-linq-v-c/) - [Глава 22. Шифрование, цифровые подписи и хэш-алгоритмы в .NET](https://csharp.webdelphi.ru/category/osnovy-c/chast-21-shifrovanie-cifrovye-podpisi-i-xesh-algoritmy-v-net/) - [Глава 23. Дополнительные классы и структуры и возможности .NET](https://csharp.webdelphi.ru/category/osnovy-c/chast-22-dopolnitelnye-klassy-i-struktury-i-vozmozhnosti-net/) - [ASP.NET Core Web API](https://csharp.webdelphi.ru/category/asp-net-core-web-api/) - [Введение в ASP.NET Core Web API](https://csharp.webdelphi.ru/category/asp-net-core-web-api/vvedenie-v-asp-net-core-web-api/) - [Контроллеры ASP.NET Core Web API](https://csharp.webdelphi.ru/category/asp-net-core-web-api/kontrollery-asp-net-core-web-api/) - [Основы ASP.NET Core Web API](https://csharp.webdelphi.ru/category/asp-net-core-web-api/osnovy-asp-net-core-web-api/) - [Dependency Injection](https://csharp.webdelphi.ru/category/asp-net-core-web-api/dependency-injection/) - [Обработка ошибок](https://csharp.webdelphi.ru/category/asp-net-core-web-api/obrabotka-oshibok/) - [Кэширование](https://csharp.webdelphi.ru/category/asp-net-core-web-api/keshirovanie/) - [Лытдыбр](https://csharp.webdelphi.ru/category/lytdybr/) - [Глава 10. Кортежи, структуры и записи](https://csharp.webdelphi.ru/category/osnovy-c/chast-10-kortezhi/) - [Глава 24. Dependency Injection (DI)](https://csharp.webdelphi.ru/category/osnovy-c/glava-24-dependency-injection-di/) - [Конфигурация приложения ASP.NET Core](https://csharp.webdelphi.ru/category/asp-net-core-web-api/konfiguraciya-prilozheniya-asp-net-core/) - [Ведение журналов (логов) приложения](https://csharp.webdelphi.ru/category/asp-net-core-web-api/vedenie-zhurnalov-logov-prilozheniya/) - [Модели](https://csharp.webdelphi.ru/category/asp-net-core-web-api/modeli/) - [Аутентификация и авторизация в ASP.NET Core Web API](https://csharp.webdelphi.ru/category/asp-net-core-web-api/autentifikaciya-i-avtorizaciya-v-asp-net-core-web-api/) - [Централизованная обработка ошибок](https://csharp.webdelphi.ru/category/asp-net-core-web-api/centralizovannaya-obrabotka-oshibok/) - [Сжатие ответов](https://csharp.webdelphi.ru/category/asp-net-core-web-api/szhatie-otvetov/) - [CORS](https://csharp.webdelphi.ru/category/asp-net-core-web-api/cors/) - [Согласование содержимого](https://csharp.webdelphi.ru/category/asp-net-core-web-api/soglasovanie-soderzhimogo/) - [Документирование API](https://csharp.webdelphi.ru/category/asp-net-core-web-api/dokumentirovanie-api/) - [ASP.NET Core Blazor Hybrid](https://csharp.webdelphi.ru/category/asp-net-core-blazor-hybrid/) - [Введение в Blazor Hybrid](https://csharp.webdelphi.ru/category/asp-net-core-blazor-hybrid/vvedenie-v-blazor-hybrid/) - [Компоненты Razor](https://csharp.webdelphi.ru/category/asp-net-core-blazor-hybrid/komponenty-razor/) - [Маршрутизация и навигация](https://csharp.webdelphi.ru/category/asp-net-core-blazor-hybrid/marshrutizaciya-i-navigaciya/) - [Внедрение зависимостей](https://csharp.webdelphi.ru/category/asp-net-core-blazor-hybrid/vnedrenie-zavisimostej/) - [Конфигурация](https://csharp.webdelphi.ru/category/asp-net-core-blazor-hybrid/konfiguraciya/) - [Разработка под Android](https://csharp.webdelphi.ru/category/asp-net-core-blazor-hybrid/razrabotka-pod-android/) - [Дополнительные материалы](https://csharp.webdelphi.ru/category/asp-net-core-blazor-hybrid/dopolnitelnye-materialy/) - [.NET MAUI](https://csharp.webdelphi.ru/category/net-maui/) - [Введение в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/vvedenie-v-net-maui/) - [Построение графического интерфейса. Основы XAML](https://csharp.webdelphi.ru/category/net-maui/postroenie-graficheskogo-interfejsa-osnovy-xaml/) - [Элементы управления](https://csharp.webdelphi.ru/category/net-maui/elementy-upravleniya/) - [Страницы приложения .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/stranicy-prilozheniya-net-maui/) - [Shell](https://csharp.webdelphi.ru/category/net-maui/shell/) - [Ресурсы и стили](https://csharp.webdelphi.ru/category/net-maui/resursy-i-stili/) - [Привязка в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/privyazka-v-net-maui/) - [Триггеры в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/triggery-v-net-maui/) - [Анимация в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/animaciya-v-net-maui/) - [Внедрение зависимостей в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/vnedrenie-zavisimostej-v-net-maui/) - [MVVM в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/mvvm-v-net-maui/) - [Маршрутизация и навигация в NET MAUI](https://csharp.webdelphi.ru/category/net-maui/marshrutizaciya-i-navigaciya-v-net-maui/) - [Конфигурация приложения .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/konfiguraciya-prilozheniya-net-maui/) - [Доступ к данным в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/dostup-k-dannym-v-net-maui/) - [Разработка под Android в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/razrabotka-pod-android-v-net-maui/) - [Жесты в .NET MAUI](https://csharp.webdelphi.ru/category/net-maui/zhesty-v-net-maui/) - [Переводы](https://csharp.webdelphi.ru/category/translations/) - [Введение в WPF](https://csharp.webdelphi.ru/category/wpf/vvedenie-v-wpf/) - [XAML в WPF](https://csharp.webdelphi.ru/category/wpf/xaml-wpf/) - [Макет приложения в WPF](https://csharp.webdelphi.ru/category/wpf/maket-prilozheniya/) - [Элементы управления](https://csharp.webdelphi.ru/category/wpf/elementy-upravleniya-wpf/) - [Ресурсы и стили WPF](https://csharp.webdelphi.ru/category/wpf/resursy-i-stili-wpf/) - [Привязка в WPF](https://csharp.webdelphi.ru/category/wpf/privyazka-v-wpf/) - [Open XML SDK](https://csharp.webdelphi.ru/category/open-xml-sdk/) - [Word (DOCX)](https://csharp.webdelphi.ru/category/open-xml-sdk/word-docx/) ## Метки - [C#](https://csharp.webdelphi.ru/tag/c/) - [VS](https://csharp.webdelphi.ru/tag/vs/) - [Visual Studio](https://csharp.webdelphi.ru/tag/visual-studio/) - [переменные](https://csharp.webdelphi.ru/tag/peremennye/) - [var](https://csharp.webdelphi.ru/tag/var/) - [_](https://csharp.webdelphi.ru/tag/_/) - [пустая переменная](https://csharp.webdelphi.ru/tag/pustaya-peremennaya/) - [типы данных](https://csharp.webdelphi.ru/tag/tipy-dannyx/) - [целые числа](https://csharp.webdelphi.ru/tag/celye-chisla/) - [вещественные числа](https://csharp.webdelphi.ru/tag/veshhestvennye-chisla/) - [суффиксы](https://csharp.webdelphi.ru/tag/suffiksy/) - [логические операторы](https://csharp.webdelphi.ru/tag/logicheskie-operatory/) - [логические операции](https://csharp.webdelphi.ru/tag/logicheskie-operacii/) - [if](https://csharp.webdelphi.ru/tag/if/) - [switch](https://csharp.webdelphi.ru/tag/switch/) - [тернарная операция](https://csharp.webdelphi.ru/tag/ternarnaya-operaciya/) - [цикл](https://csharp.webdelphi.ru/tag/cikl/) - [for](https://csharp.webdelphi.ru/tag/for/) - [while](https://csharp.webdelphi.ru/tag/while/) - [do while](https://csharp.webdelphi.ru/tag/do-while/) - [foreach](https://csharp.webdelphi.ru/tag/foreach/) - [break](https://csharp.webdelphi.ru/tag/break/) - [continue](https://csharp.webdelphi.ru/tag/continue/) - [NET Core 3.1](https://csharp.webdelphi.ru/tag/net-core-3-1/) - [.NET Framework 4.7.2](https://csharp.webdelphi.ru/tag/net-framework-4-7-2/) - [перенос](https://csharp.webdelphi.ru/tag/perenos/) - [массив](https://csharp.webdelphi.ru/tag/massiv/) - [массив массивов](https://csharp.webdelphi.ru/tag/massiv-massivov/) - [зубчатый массив](https://csharp.webdelphi.ru/tag/zubchatyj-massiv/) - [многомерный массив](https://csharp.webdelphi.ru/tag/mnogomernyj-massiv/) - [ранг массива](https://csharp.webdelphi.ru/tag/rang-massiva/) - [алгоритм](https://csharp.webdelphi.ru/tag/algoritm/) - [сортировка](https://csharp.webdelphi.ru/tag/sortirovka/) - [сортировка массива](https://csharp.webdelphi.ru/tag/sortirovka-massiva/) - [сортировка пузырьком](https://csharp.webdelphi.ru/tag/sortirovka-puzyrkom/) - [шейкерная сортировка](https://csharp.webdelphi.ru/tag/shejkernaya-sortirovka/) - [сортировка перемешиванием](https://csharp.webdelphi.ru/tag/sortirovka-peremeshivaniem/) - [гномья сортировка](https://csharp.webdelphi.ru/tag/gnomya-sortirovka/) - [сортировка вставками](https://csharp.webdelphi.ru/tag/sortirovka-vstavkami/) - [методы](https://csharp.webdelphi.ru/tag/metody/) - [метод C#](https://csharp.webdelphi.ru/tag/metod-c/) - [void](https://csharp.webdelphi.ru/tag/void/) - [out](https://csharp.webdelphi.ru/tag/out/) - [ref](https://csharp.webdelphi.ru/tag/ref/) - [in](https://csharp.webdelphi.ru/tag/in/) - [параметры](https://csharp.webdelphi.ru/tag/parametry/) - [перечисления](https://csharp.webdelphi.ru/tag/perechisleniya/) - [enum](https://csharp.webdelphi.ru/tag/enum/) - [кортежи](https://csharp.webdelphi.ru/tag/kortezhi/) - [кортеж](https://csharp.webdelphi.ru/tag/kortezh/) - [класс](https://csharp.webdelphi.ru/tag/klass/) - [объект](https://csharp.webdelphi.ru/tag/obekt/) - [конструктор](https://csharp.webdelphi.ru/tag/konstruktor/) - [инициализатор объекта](https://csharp.webdelphi.ru/tag/inicializator-obekta/) - [свойство](https://csharp.webdelphi.ru/tag/svojstvo/) - [автосвойство](https://csharp.webdelphi.ru/tag/avtosvojstvo/) - [get](https://csharp.webdelphi.ru/tag/get/) - [set](https://csharp.webdelphi.ru/tag/set/) - [выражение для свойств](https://csharp.webdelphi.ru/tag/vyrazhenie-dlya-svojstv/) - [сигнатура](https://csharp.webdelphi.ru/tag/signatura/) - [перегрузка метода](https://csharp.webdelphi.ru/tag/peregruzka-metoda/) - [overload](https://csharp.webdelphi.ru/tag/overload/) - [method overloading](https://csharp.webdelphi.ru/tag/method-overloading/) - [static](https://csharp.webdelphi.ru/tag/static/) - [Task](https://csharp.webdelphi.ru/tag/task/) - [TPL](https://csharp.webdelphi.ru/tag/tpl/) - [Invoke](https://csharp.webdelphi.ru/tag/invoke/) - [System.Diagnostics](https://csharp.webdelphi.ru/tag/system-diagnostics/) - [Stopwatch](https://csharp.webdelphi.ru/tag/stopwatch/) - [строки](https://csharp.webdelphi.ru/tag/stroki/) - [string](https://csharp.webdelphi.ru/tag/string/) - [System.String](https://csharp.webdelphi.ru/tag/system-string/) - [методы строк](https://csharp.webdelphi.ru/tag/metody-strok/) - [string методы](https://csharp.webdelphi.ru/tag/string-metody/) - [Format](https://csharp.webdelphi.ru/tag/format/) - [форматирование](https://csharp.webdelphi.ru/tag/formatirovanie/) - [интерполяция](https://csharp.webdelphi.ru/tag/interpolyaciya/) - [Toolbox](https://csharp.webdelphi.ru/tag/toolbox/) - [Панель элементов](https://csharp.webdelphi.ru/tag/panel-elementov/) - [WPF](https://csharp.webdelphi.ru/tag/wpf/) - [ListBox](https://csharp.webdelphi.ru/tag/listbox/) - [наследование](https://csharp.webdelphi.ru/tag/nasledovanie/) - [инкапсуляция](https://csharp.webdelphi.ru/tag/inkapsulyaciya/) - [полиморфизм](https://csharp.webdelphi.ru/tag/polimorfizm/) - [последовательность](https://csharp.webdelphi.ru/tag/posledovatelnost/) - [null](https://csharp.webdelphi.ru/tag/null/) - [??](https://csharp.webdelphi.ru/tag/107/) - [??=](https://csharp.webdelphi.ru/tag/108/) - [индексатор](https://csharp.webdelphi.ru/tag/indeksator/) - [upcasting](https://csharp.webdelphi.ru/tag/upcasting/) - [downcasting](https://csharp.webdelphi.ru/tag/downcasting/) - [is](https://csharp.webdelphi.ru/tag/is/) - [as](https://csharp.webdelphi.ru/tag/as/) - [преобразование](https://csharp.webdelphi.ru/tag/preobrazovanie/) - [перегрузка операторов](https://csharp.webdelphi.ru/tag/peregruzka-operatorov/) - [перегрузка операций](https://csharp.webdelphi.ru/tag/peregruzka-operacij/) - [виртуальный метод](https://csharp.webdelphi.ru/tag/virtualnyj-metod/) - [виртуальное свойство](https://csharp.webdelphi.ru/tag/virtualnoe-svojstvo/) - [virtual](https://csharp.webdelphi.ru/tag/virtual/) - [override](https://csharp.webdelphi.ru/tag/override/) - [sealed](https://csharp.webdelphi.ru/tag/sealed/) - [сокрытие метода](https://csharp.webdelphi.ru/tag/sokrytie-metoda/) - [hiding c#](https://csharp.webdelphi.ru/tag/hiding-c/) - [Object](https://csharp.webdelphi.ru/tag/object/) - [Equals](https://csharp.webdelphi.ru/tag/equals/) - [ReferenceEquals](https://csharp.webdelphi.ru/tag/referenceequals/) - [ToString](https://csharp.webdelphi.ru/tag/tostring/) - [GetHashCode](https://csharp.webdelphi.ru/tag/gethashcode/) - [шаблон](https://csharp.webdelphi.ru/tag/shablon/) - [generics](https://csharp.webdelphi.ru/tag/generics/) - [обобщения](https://csharp.webdelphi.ru/tag/obobshheniya/) - [дженерики](https://csharp.webdelphi.ru/tag/dzheneriki/) - [try](https://csharp.webdelphi.ru/tag/try/) - [catch](https://csharp.webdelphi.ru/tag/catch/) - [finally](https://csharp.webdelphi.ru/tag/finally/) - [исключения](https://csharp.webdelphi.ru/tag/isklyucheniya/) - [exception](https://csharp.webdelphi.ru/tag/exception/) - [перехват исключений](https://csharp.webdelphi.ru/tag/perexvat-isklyuchenij/) - [when](https://csharp.webdelphi.ru/tag/when/) - [throw](https://csharp.webdelphi.ru/tag/throw/) - [multipart/form-data](https://csharp.webdelphi.ru/tag/multipart-form-data/) - [HTTP](https://csharp.webdelphi.ru/tag/http/) - [Parser](https://csharp.webdelphi.ru/tag/parser/) - [?](https://csharp.webdelphi.ru/tag/156/) - [обнуляемый тип](https://csharp.webdelphi.ru/tag/obnulyaemyj-tip/) - [идентификатор](https://csharp.webdelphi.ru/tag/identifikator/) - [ID](https://csharp.webdelphi.ru/tag/id/) - [Guid](https://csharp.webdelphi.ru/tag/guid/) - [уникальный идентификатор](https://csharp.webdelphi.ru/tag/unikalnyj-identifikator/) - [WinForms](https://csharp.webdelphi.ru/tag/winforms/) - [ListView](https://csharp.webdelphi.ru/tag/listview/) - [ListViewItem](https://csharp.webdelphi.ru/tag/listviewitem/) - [.NET 5](https://csharp.webdelphi.ru/tag/net-5/) - [SQLite](https://csharp.webdelphi.ru/tag/sqlite/) - [System.Reflection](https://csharp.webdelphi.ru/tag/system-reflection/) - [Type](https://csharp.webdelphi.ru/tag/type/) - [рефлексия](https://csharp.webdelphi.ru/tag/refleksiya/) - [System.IO](https://csharp.webdelphi.ru/tag/system-io/) - [DriveInfo](https://csharp.webdelphi.ru/tag/driveinfo/) - [Directory](https://csharp.webdelphi.ru/tag/directory/) - [DirectoryInfo](https://csharp.webdelphi.ru/tag/directoryinfo/) - [File](https://csharp.webdelphi.ru/tag/file/) - [FileInfo](https://csharp.webdelphi.ru/tag/fileinfo/) - [Path](https://csharp.webdelphi.ru/tag/path/) - [файлы](https://csharp.webdelphi.ru/tag/fajly/) - [рекурсия](https://csharp.webdelphi.ru/tag/rekursiya/) - [дерево каталогов](https://csharp.webdelphi.ru/tag/derevo-katalogov/) - [стек](https://csharp.webdelphi.ru/tag/stek/) - [размер файла](https://csharp.webdelphi.ru/tag/razmer-fajla/) - [IFormatProvider](https://csharp.webdelphi.ru/tag/iformatprovider/) - [FileSystemWatcher](https://csharp.webdelphi.ru/tag/filesystemwatcher/) - [файловая система](https://csharp.webdelphi.ru/tag/fajlovaya-sistema/) - [отслеживание измеений](https://csharp.webdelphi.ru/tag/otslezhivanie-izmeenij/) - [List](https://csharp.webdelphi.ru/tag/list/) - [Sort](https://csharp.webdelphi.ru/tag/sort/) - [LinkedList](https://csharp.webdelphi.ru/tag/linkedlist/) - [System.Collections.Generic](https://csharp.webdelphi.ru/tag/system-collections-generic/) - [площадь многоугольника](https://csharp.webdelphi.ru/tag/ploshhad-mnogougolnika/) - [простое число](https://csharp.webdelphi.ru/tag/prostoe-chislo/) - [delegete](https://csharp.webdelphi.ru/tag/delegete/) - [делегат](https://csharp.webdelphi.ru/tag/delegat/) - [event](https://csharp.webdelphi.ru/tag/event/) - [class](https://csharp.webdelphi.ru/tag/class/) - [LINQ](https://csharp.webdelphi.ru/tag/linq/) - [Select](https://csharp.webdelphi.ru/tag/select/) - [Where](https://csharp.webdelphi.ru/tag/where/) - [SelectMany](https://csharp.webdelphi.ru/tag/selectmany/) - [OrderBy](https://csharp.webdelphi.ru/tag/orderby/) - [OrderByDescending](https://csharp.webdelphi.ru/tag/orderbydescending/) - [ThenBy](https://csharp.webdelphi.ru/tag/thenby/) - [ThenByDescending](https://csharp.webdelphi.ru/tag/thenbydescending/) - [события](https://csharp.webdelphi.ru/tag/sobytiya/) - [JSON](https://csharp.webdelphi.ru/tag/json/) - [namespace](https://csharp.webdelphi.ru/tag/namespace/) - [пространства имен](https://csharp.webdelphi.ru/tag/prostranstva-imen/) - [struct](https://csharp.webdelphi.ru/tag/struct/) - [структура](https://csharp.webdelphi.ru/tag/struktura/) - [DateTime](https://csharp.webdelphi.ru/tag/datetime/) - [дата и время в C#](https://csharp.webdelphi.ru/tag/data-i-vremya-v-c/) - [DateOnly](https://csharp.webdelphi.ru/tag/dateonly/) - [TimeOnly](https://csharp.webdelphi.ru/tag/timeonly/) - [interface](https://csharp.webdelphi.ru/tag/interface/) - [интерфейс](https://csharp.webdelphi.ru/tag/interfejs/) - [ICloneable](https://csharp.webdelphi.ru/tag/icloneable/) - [IComparable](https://csharp.webdelphi.ru/tag/icomparable/) - [IComparer](https://csharp.webdelphi.ru/tag/icomparer/) - [IEnumerator](https://csharp.webdelphi.ru/tag/ienumerator/) - [IEnumerable](https://csharp.webdelphi.ru/tag/ienumerable/) - [blazor](https://csharp.webdelphi.ru/tag/blazor/) - [VS Code](https://csharp.webdelphi.ru/tag/vs-code/) - [Blazor Server](https://csharp.webdelphi.ru/tag/blazor-server/) - [razor](https://csharp.webdelphi.ru/tag/razor/) - [OpenEcology](https://csharp.webdelphi.ru/tag/openecology/) - [поиск](https://csharp.webdelphi.ru/tag/poisk/) - [валидация](https://csharp.webdelphi.ru/tag/validaciya/) - [проверка](https://csharp.webdelphi.ru/tag/proverka/) - [Thread](https://csharp.webdelphi.ru/tag/thread/) - [многопоточность](https://csharp.webdelphi.ru/tag/mnogopotochnost/) - [синхронизация](https://csharp.webdelphi.ru/tag/sinxronizaciya/) - [поток](https://csharp.webdelphi.ru/tag/potok/) - [Monitor](https://csharp.webdelphi.ru/tag/monitor/) - [Mutex](https://csharp.webdelphi.ru/tag/mutex/) - [Semaphore](https://csharp.webdelphi.ru/tag/semaphore/) - [таймер](https://csharp.webdelphi.ru/tag/tajmer/) - [Timer](https://csharp.webdelphi.ru/tag/timer/) - [параллельное программирование](https://csharp.webdelphi.ru/tag/parallelnoe-programmirovanie/) - [сумма](https://csharp.webdelphi.ru/tag/summa/) - [условие if](https://csharp.webdelphi.ru/tag/uslovie-if/) - [TimeSpan](https://csharp.webdelphi.ru/tag/timespan/) - [partial](https://csharp.webdelphi.ru/tag/partial/) - [Queue](https://csharp.webdelphi.ru/tag/queue/) - [очередь](https://csharp.webdelphi.ru/tag/ochered/) - [Stack](https://csharp.webdelphi.ru/tag/stack/) - [Dictionary](https://csharp.webdelphi.ru/tag/dictionary/) - [словарь](https://csharp.webdelphi.ru/tag/slovar/) - [ObservableCollection](https://csharp.webdelphi.ru/tag/observablecollection/) - [XAML](https://csharp.webdelphi.ru/tag/xaml/) - [Grid](https://csharp.webdelphi.ru/tag/grid/) - [StackPanel](https://csharp.webdelphi.ru/tag/stackpanel/) - [DockPanel](https://csharp.webdelphi.ru/tag/dockpanel/) - [Canvas](https://csharp.webdelphi.ru/tag/canvas/) - [Свойства](https://csharp.webdelphi.ru/tag/svojstva/) - [CheckBox](https://csharp.webdelphi.ru/tag/checkbox/) - [RadioButton](https://csharp.webdelphi.ru/tag/radiobutton/) - [IP](https://csharp.webdelphi.ru/tag/ip/) - [host](https://csharp.webdelphi.ru/tag/host/) - [localStorage](https://csharp.webdelphi.ru/tag/localstorage/) - [sessionStorage](https://csharp.webdelphi.ru/tag/sessionstorage/) - [absrtact](https://csharp.webdelphi.ru/tag/absrtact/) - [абстрактный класс](https://csharp.webdelphi.ru/tag/abstraktnyj-klass/) - [DynamicComponent](https://csharp.webdelphi.ru/tag/dynamiccomponent/) - [bootstrap](https://csharp.webdelphi.ru/tag/bootstrap/) - [Console](https://csharp.webdelphi.ru/tag/console/) - [Фибоначчи](https://csharp.webdelphi.ru/tag/fibonachchi/) - [BigInteger](https://csharp.webdelphi.ru/tag/biginteger/) - [Progress](https://csharp.webdelphi.ru/tag/progress/) - [Blazor Hybrid](https://csharp.webdelphi.ru/tag/blazor-hybrid/) - [EventCallback](https://csharp.webdelphi.ru/tag/eventcallback/) - [abstract](https://csharp.webdelphi.ru/tag/abstract/) - [PropertyInfo](https://csharp.webdelphi.ru/tag/propertyinfo/) - [Preferences](https://csharp.webdelphi.ru/tag/preferences/) - [StringBuilder](https://csharp.webdelphi.ru/tag/stringbuilder/) - [Math](https://csharp.webdelphi.ru/tag/math/) - [Convert](https://csharp.webdelphi.ru/tag/convert/) - [Regex](https://csharp.webdelphi.ru/tag/regex/) - [async](https://csharp.webdelphi.ru/tag/async/) - [await](https://csharp.webdelphi.ru/tag/await/) - [async void](https://csharp.webdelphi.ru/tag/async-void/) - [WhenAll](https://csharp.webdelphi.ru/tag/whenall/) - [WhenAny](https://csharp.webdelphi.ru/tag/whenany/) - [await exception](https://csharp.webdelphi.ru/tag/await-exception/) - [Blazorise](https://csharp.webdelphi.ru/tag/blazorise/) - [Layout](https://csharp.webdelphi.ru/tag/layout/) - [ZIP](https://csharp.webdelphi.ru/tag/zip/) - [zip-архив](https://csharp.webdelphi.ru/tag/zip-arxiv/) - [ZipFile](https://csharp.webdelphi.ru/tag/zipfile/) - [ZipArchive](https://csharp.webdelphi.ru/tag/ziparchive/) - [ZipArchiveEntry](https://csharp.webdelphi.ru/tag/ziparchiveentry/) - [SQLite.NET](https://csharp.webdelphi.ru/tag/sqlite-net/) - [CRUD](https://csharp.webdelphi.ru/tag/crud/) - [Excel](https://csharp.webdelphi.ru/tag/excel/) - [SHA256](https://csharp.webdelphi.ru/tag/sha256/) - [SHA384](https://csharp.webdelphi.ru/tag/sha384/) - [SHA512](https://csharp.webdelphi.ru/tag/sha512/) - [MD5](https://csharp.webdelphi.ru/tag/md5/) - [HMAC](https://csharp.webdelphi.ru/tag/hmac/) - [HMAC-SHA256](https://csharp.webdelphi.ru/tag/hmac-sha256/) - [AES](https://csharp.webdelphi.ru/tag/aes/) - [FileStream](https://csharp.webdelphi.ru/tag/filestream/) - [StreamWriter](https://csharp.webdelphi.ru/tag/streamwriter/) - [StreamReader](https://csharp.webdelphi.ru/tag/streamreader/) - [BinaryReader](https://csharp.webdelphi.ru/tag/binaryreader/) - [BinaryWriter](https://csharp.webdelphi.ru/tag/binarywriter/) - [dynamic](https://csharp.webdelphi.ru/tag/dynamic/) - [Random](https://csharp.webdelphi.ru/tag/random/) - [RandomNumberGenerator](https://csharp.webdelphi.ru/tag/randomnumbergenerator/) - [римские цифры](https://csharp.webdelphi.ru/tag/rimskie-cifry/) - [локальные функции](https://csharp.webdelphi.ru/tag/lokalnye-funkcii/) - [Process](https://csharp.webdelphi.ru/tag/process/) - [EF Core](https://csharp.webdelphi.ru/tag/ef-core/) - [MySQL](https://csharp.webdelphi.ru/tag/mysql/) - [Database](https://csharp.webdelphi.ru/tag/database/) - [миграции](https://csharp.webdelphi.ru/tag/migracii/) - [PLINQ](https://csharp.webdelphi.ru/tag/plinq/) - [ASP.NET Core](https://csharp.webdelphi.ru/tag/asp-net-core/) - [ASP.NET Core MVC](https://csharp.webdelphi.ru/tag/asp-net-core-mvc/) - [Основы C#](https://csharp.webdelphi.ru/tag/osnovy-c/) - [лабораторная работа](https://csharp.webdelphi.ru/tag/laboratornaya-rabota/) - [ASP.NET Core Web API](https://csharp.webdelphi.ru/tag/asp-net-core-web-api/) - [рабочий день](https://csharp.webdelphi.ru/tag/rabochij-den/) - [анонимный метод](https://csharp.webdelphi.ru/tag/anonimnyj-metod/) - [лямбда](https://csharp.webdelphi.ru/tag/lyambda/) - [Action](https://csharp.webdelphi.ru/tag/action/) - [Func](https://csharp.webdelphi.ru/tag/func/) - [Predicate](https://csharp.webdelphi.ru/tag/predicate/) - [record](https://csharp.webdelphi.ru/tag/record/) - [запись](https://csharp.webdelphi.ru/tag/zapis/) - [Dependency Injection](https://csharp.webdelphi.ru/tag/dependency-injection/) - [Android](https://csharp.webdelphi.ru/tag/android/) - [.NET MAUI](https://csharp.webdelphi.ru/tag/net-maui/) - [Перевод](https://csharp.webdelphi.ru/tag/perevod/) - [DocumentFormat.OpenXml](https://csharp.webdelphi.ru/tag/documentformat-openxml/) ## All letters - [V](https://csharp.webdelphi.ru/dict-terms-letter/v/) - [О](https://csharp.webdelphi.ru/dict-terms-letter/o/) - [S](https://csharp.webdelphi.ru/dict-terms-letter/s/) - [I](https://csharp.webdelphi.ru/dict-terms-letter/i/) - [Р](https://csharp.webdelphi.ru/dict-terms-letter/r/) - [A](https://csharp.webdelphi.ru/dict-terms-letter/a/) - [B](https://csharp.webdelphi.ru/dict-terms-letter/b/) - [N](https://csharp.webdelphi.ru/dict-terms-letter/n/) - [Д](https://csharp.webdelphi.ru/dict-terms-letter/d/) - [T](https://csharp.webdelphi.ru/dict-terms-letter/t/) - [E](https://csharp.webdelphi.ru/dict-terms-letter/e/) - [G](https://csharp.webdelphi.ru/dict-terms-letter/g/) - [W](https://csharp.webdelphi.ru/dict-terms-letter/w/) - [X](https://csharp.webdelphi.ru/dict-terms-letter/x/)