C# с нуля до уверенного уровня: от синтаксиса до архитектуры приложений

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

1. Введение в платформу .NET, базовый синтаксис, типы данных и работа с переменными

Введение в платформу .NET, базовый синтаксис, типы данных и работа с переменными

Добро пожаловать в курс «C# с нуля до уверенного уровня». Мы начинаем наше путешествие в мир программирования с одного из самых мощных и востребованных языков современности — C# (произносится как «си-шарп»).

В этой первой статье мы разберем фундамент, на котором строятся все приложения: от простых консольных утилит до сложных веб-сервисов и видеоигр. Мы узнаем, как работает платформа .NET, напишем первую программу и научимся хранить данные в памяти компьютера.

Что такое C# и платформа .NET?

Новички часто путают язык программирования и платформу. Давайте проведем аналогию. Представьте, что вы хотите построить дом.

* C# (Язык) — это ваши чертежи и инструкции. Это набор правил и слов, с помощью которых вы описываете, что нужно сделать. * .NET (Платформа) — это строительная бригада, инструменты, техника и готовые материалы (кирпичи, окна), которые превращают ваши чертежи в реальный дом.

C# — это объектно-ориентированный язык программирования со строгой типизацией, разработанный компанией Microsoft. Он безопасен, удобен и универсален.

.NET — это среда выполнения и огромная библиотека готовых классов. Когда вы пишете код на C#, он не выполняется процессором напрямую. Сначала он проходит несколько этапов превращения.

!Путь кода от текста программы до выполнения процессором

Ключевые компоненты .NET:

  • CLR (Common Language Runtime) — «виртуальная машина», которая управляет выполнением вашей программы. Она отвечает за управление памятью (сборка мусора), безопасность и обработку ошибок.
  • FCL (Framework Class Library) — стандартная библиотека классов. Вам не нужно писать код для работы с файлами, сетью или математикой с нуля — всё это уже есть в FCL.
  • Структура программы на C#

    Любая программа на C# состоит из определенных блоков. Давайте взглянем на классический пример «Hello, World!» и разберем его по косточкам.

    Разбор кода:

    * using System; — Подключение пространства имен. Это как сказать: «Я буду использовать инструменты из ящика с наклейкой System». Именно там лежит команда для вывода текста на экран. * namespace MyFirstAppПространство имен. Это контейнер, который помогает организовать код и избежать конфликта имен (чтобы ваш класс Program не перепутался с чужим классом Program). * class ProgramКласс. Основной строительный блок C#. Весь исполняемый код должен находиться внутри классов. * static void Main(string[] args)Метод Main. Это точка входа в программу. Когда вы запускаете приложение, CLR ищет именно этот метод и начинает выполнение команд внутри него. * Console.WriteLine(...) — Команда, которая выводит текст в консоль и переводит курсор на новую строку. * Фигурные скобки { } — Обозначают начало и конец блока кода. * Точка с запятой ; — Обязательный знак завершения каждой команды. Забытая точка с запятой — самая частая ошибка новичка.

    Переменные: Хранение данных

    Программы существуют для обработки данных. Чтобы работать с данными, их нужно где-то хранить. Для этого используются переменные.

    > Переменная — это именованная область памяти, в которую можно положить значение определенного типа.

    Представьте переменную как коробку. У коробки есть:

  • Имя (подпись маркером на коробке).
  • Тип (форма коробки: круглая для мячей, плоская для документов).
  • Значение (то, что лежит внутри).
  • Синтаксис создания переменной

    Пример:

    Правила именования

    В C# принято использовать стиль camelCase для локальных переменных: первая буква строчная, каждое следующее слово с большой буквы. Правильно:* userAge, totalScore, fileName. Неправильно:* UserAge (это для методов и классов), user_age (стиль Python/C++), 1stPlace (имя не может начинаться с цифры).

    Типы данных

    C# — язык со строгой статической типизацией. Это значит, что если вы создали переменную для хранения целых чисел, вы не можете положить туда текст. Компилятор просто не позволит запустить такую программу, защищая вас от ошибок.

    Рассмотрим основные (базовые) типы данных:

    1. Целые числа

    Самый популярный тип — int.

    2. Дробные числа

    Используются для математики, денег, физических величин.

    3. Символы и строки

    Для работы с текстом.

    4. Логический тип

    Имеет всего два значения: истина или ложь. Критически важен для условий (если... то...).

    Таблица основных типов

    | Тип C# | Описание | Пример значения | | :--- | :--- | :--- | | int | Целое число | 42 | | double | Дробное число (двойной точности) | 3.14 | | bool | Логическое значение | true | | string | Строка текста | "Привет" | | char | Одиночный символ | 'Z' |

    Работа с консолью: Ввод и Вывод

    Мы уже видели Console.WriteLine, но давайте разберем взаимодействие с пользователем подробнее.

    Вывод данных

    * Console.WriteLine("Текст"); — пишет текст и переходит на новую строку. * Console.Write("Текст"); — пишет текст, но курсор остается на той же строке.

    Интерполяция строк

    Как вывести строку, содержащую значение переменной? Раньше использовали «склеивание» через плюс, но современный способ — интерполяция. Перед кавычками ставится знак "Имя: {name}, Возраст: {age}"); csharp Console.Write("Введите ваше имя: "); string userName = Console.ReadLine(); // Программа ждет, пока пользователь нажмет Enter Console.WriteLine($"Привет, {userName}!"); csharp Console.Write("Введите возраст: "); string input = Console.ReadLine(); int age = int.Parse(input); // Превращаем строку "25" в число 25 csharp /* Это начало программы. Здесь мы объявляем переменные. */ int x = 10; // Инициализация переменной x ``

    Заключение

    Сегодня вы сделали первый шаг к освоению C#. Вы узнали, что C# работает поверх мощной платформы .NET, разобрали структуру простейшей программы, научились создавать «коробки»-переменные для разных типов данных и общаться с пользователем через консоль.

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

    2. Логика программы: условные операторы, циклы, массивы и создание собственных методов

    Логика программы: условные операторы, циклы, массивы и создание собственных методов

    В предыдущей статье мы научились создавать переменные и хранить в них данные. Но просто хранить данные недостаточно. Программа становится полезной только тогда, когда она может анализировать эти данные, принимать решения и выполнять повторяющиеся действия.

    Представьте, что переменные — это ингредиенты на кухне. Сегодня мы научимся писать рецепты: «Если вода кипит, брось пельмени» (условие), «Помешивай 10 минут» (цикл) или «Нарежь овощи» (метод).

    Условные операторы: Принятие решений

    В жизни мы постоянно принимаем решения на основе условий: «Если на улице дождь, я возьму зонт, иначе пойду в кепке». В C# для этого используется конструкция if (если) и else (иначе).

    !Блок-схема работы условного оператора if-else

    Конструкция if-else

    Самый простой пример проверки условия:

    Если условие в круглых скобках (age >= 18) истинно (true), выполняется первый блок кода. Если ложно (false) — выполняется блок после else.

    Операторы сравнения

    Чтобы сформулировать условие, мы используем операторы сравнения:

    * == — Равно (не путайте с = для присваивания!) * != — Не равно * > — Больше * < — Меньше * >= — Больше или равно * <= — Меньше или равно

    Логические операторы

    Иногда нужно проверить сразу несколько условий. Например, доступ разрешен, если пользователю есть 18 И у него есть билет.

    * && (Логическое И) — Истина, только если оба условия верны. * || (Логическое ИЛИ) — Истина, если хотя бы одно условие верно. * ! (Логическое НЕ) — Инвертирует значение (превращает true в false и наоборот).

    Конструкция switch

    Если вам нужно проверить одну переменную на множество конкретных значений, вместо кучи if-else удобнее использовать switch.

    Обратите внимание на слово break. Оно обязательно, чтобы выйти из конструкции switch после выполнения нужного блока.

    Циклы: Повторение действий

    Компьютеры идеально подходят для выполнения рутинных задач. Если вам нужно вывести фразу «Привет» 100 раз, глупо писать Console.WriteLine 100 раз. Для этого существуют циклы.

    Цикл while (Пока)

    Этот цикл выполняется до тех пор, пока условие истинно. Проверка происходит перед каждой итерацией (повторением).

  • int i = 0 — Создаем счетчик i, равный 0.
  • i < 5 — Проверяем: 0 меньше 5? Да. Выполняем код.
  • i++ — Увеличиваем i на 1. Теперь i равно 1.
  • Повторяем, пока i не станет равным 5.
  • Массивы: Хранение множества данных

    Представьте, что вам нужно хранить оценки 30 учеников. Создавать 30 переменных (grade1, grade2...) — ужасная идея. Здесь на помощь приходят массивы.

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

    !Визуализация массива как набора пронумерованных ячеек памяти

    Создание массива

    Доступ к элементам

    Элементы массива нумеруются с нуля. Это золотое правило программирования: первый элемент имеет индекс 0.

    Перебор массива

    Чтобы пройтись по всем элементам массива, можно использовать цикл for или специальный цикл foreach.

    Способ 1: for Удобен, если нужен индекс элемента.

    * static — пока просто запомните, что для вызова из Main метод должен быть статическим. * void — означает, что метод ничего не возвращает (просто делает действие). * Параметры — данные, которые метод получает на вход.

    Метод с возвращаемым значением

    Если метод должен что-то посчитать и вернуть результат, вместо void мы указываем тип данных (например, int), а внутри используем ключевое слово return.

    !Метод принимает данные, обрабатывает их и возвращает результат

    Зачем нужны методы?

  • Читаемость: Код CalculateSalary() понятнее, чем 20 строк формул.
  • Повторное использование: Вы можете вызвать Add(x, y) сто раз в разных местах программы.
  • Упрощение отладки: Если ошибка в формуле сложения, вы исправите её в одном месте (в методе), а не по всему коду.
  • Заключение

    Сегодня мы превратили C# из простого калькулятора в мощный инструмент логики. Мы научились: * Ветвить программу с помощью if и switch. * Зацикливать действия через for и while. * Хранить списки данных в массивах. * Структурировать код, создавая свои методы.

    Теперь у вас достаточно знаний, чтобы написать простую текстовую игру, викторину или калькулятор. В следующей статье мы перейдем к самой важной парадигме современного программирования — Объектно-Ориентированному Программированию (ООП). Мы узнаем, что такое классы и объекты на самом деле.