Підрозділ 2.1
Структура програми
Знайомить зі структурою C#-програми: файлом Program.cs, інструкціями, блоками коду, коментарями та файлом проєкту.
2.1. Структура програми
Виконання програми
Весь код програми мовою C# міститься у файлах з розширенням .cs. За замовчуванням у проекті, який створюється у Visual Studio або через .NET CLI, вже є один файл — Program.cs. Саме він є точкою входу програми: виконання починається звідси.

Починаючи з C# 9 та .NET 5, у цьому файлі не обов'язково оголошувати клас Program і метод Main — компілятор додає їх неявно. Достатньо написати код напряму:
Це називається top-level statements — можливість писати код верхнього рівня без додаткових обгорток. Саме цей стиль використовується у сучасних версіях .NET і в цьому курсі.
До C# 9 програма виглядала ось так — з явним класом і методом Main:
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}Обидва варіанти компілюються однаково — різниця лише у кількості синтаксичного «шуму». У навчальному коді ми будемо використовувати сучасний стиль без зайвих обгорток.
Інструкції
Базовим будівельним блоком програми є інструкції (statements). Інструкція — це одна закінчена дія: оголошення змінної, присвоєння значення, виклик методу, умовний перехід, повернення з методу тощо. Кожна інструкція в C# завершується крапкою з комою (;). Цей знак вказує компілятору, де закінчується одна інструкція і починається наступна.
Наприклад, виклик методу Console.WriteLine — це одна інструкція:
Кожен рядок тут є окремою інструкцією. Якщо забути крапку з комою — компілятор негайно повідомить про синтаксичну помилку, і програма не скомпілюється. Це одна з найпоширеніших помилок початківців.
Кілька інструкцій можуть бути об'єднані в один блок коду. Блок коду береться у фігурні дужки, а інструкції розміщуються між ними:
Тут блок коду містить дві інструкції. Один блок може містити інший блок — вкладення не обмежене:
На практиці блоки коду з'являються скрізь: у тілах методів, умовах if, циклах for та while, класах. Розуміння того, що блок — це просто згрупований набір інструкцій у дужках, допомагає читати будь-який C#-код.
Реєстрозалежність
C# є реєстрозалежною мовою (case-sensitive). Це означає, що різниця між великими і малими літерами суттєва: однакові послідовності символів, але з різним регістром, сприймаються як абсолютно різні ідентифікатори.
Наприклад, для виведення тексту на консоль використовується метод Console.WriteLine. Якщо написати console.writeline або Console.writeline — компілятор видасть помилку, тому що такі ідентифікатори не існують. Регістр першої літери та регістр W у WriteLine є частиною імені і обов'язкові.
Те саме стосується змінних. Ідентифікатори name, Name і NAME — це три різні змінні з точки зору компілятора:
На практиці давати змінним імена, що відрізняються лише регістром, не рекомендується — це заплутує код. Натомість у C# прийнятий чіткий стиль іменування: PascalCase для класів і методів (Console, WriteLine, Patient, GetAge) та camelCase для локальних змінних і параметрів (name, patientAge, systolicPressure).
Коментарі
Важливою частиною програмного коду є коментарі. Вони не є частиною програми — при компіляції коментарі повністю ігноруються і не впливають на виконання. Проте коментарі роблять код зрозумілішим, допомагаючи пояснити логіку, наміри або застереження.
У C# є два типи коментарів: однорядковий та багаторядковий.
Однорядковий коментар починається з подвійного слішу // і триває до кінця рядка. Усе, що написане після // на тому самому рядку, компілятор ігнорує:
Багаторядковий коментар поміщається між символами /* і */. Він може займати довільну кількість рядків і зручний для великих пояснень або тимчасового виключення блоку коду:
Хороший коментар пояснює чому написано саме так — не що робить код (це видно з самого коду), а чому саме таке рішення обрано, яке застереження є або яку бізнес-логіку відображає ця ділянка.
Файл проекту (.csproj)
У кожному проекті C# є файл конфігурації з розширенням .csproj. Його ім'я збігається з назвою проекту. Цей файл у форматі XML описує загальні параметри збирання та виконання проекту.
За замовчуванням файл виглядає приблизно так:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>Розберемо основні параметри:
OutputType— визначає тип вихідного артефакту. ЗначенняExeозначає, що буде створено виконуваний файл.exe, який запускається безпосередньо. ЗначенняLibrary— що буде створено файл.dll, який використовується іншими проектами як бібліотека.TargetFramework— задає версію .NET, під яку компілюється проект. Значенняnet10.0означає .NET 10. Саме цією версією визначається, які можливості мови та бібліотеки доступні у проекті.ImplicitUsings— при значенніenableкомпілятор автоматично додає підключення найпоширеніших просторів імен (System,System.Collections.Generic,System.Linqтощо). Завдяки цьому не треба вручну писатиusing System;на початку кожного файлу. Саме тому у прикладах цього курсу ви бачитеusing System;у runnable-блоках, але у реальних проектах це часто пишеться автоматично.Nullable— при значенніenableкомпілятор аналізує код і попереджає, якщо є ризик звернення доnull-посилання. Це допомагає уникнути одного з найчастіших джерел помилок у реальних системах —NullReferenceException.
На початку навчання файл .csproj можна не чіпати — він налаштовується один раз при створенні проекту. Але розуміння його структури стає важливим, коли виникає потреба змінити цільову версію .NET, підключити сторонній пакет через NuGet або налаштувати параметри компілятора.