1. Загальна структура C#-проєкту
Ваша програма — це не просто один файл, а ціла колекція файлів, папок і налаштувань. C# — мова суворо типізована, тому для великих застосунків важливо тримати все в належному порядку. Якщо ігнорувати структуру проєкту, ваш код швидко перетвориться на електронний лабіринт, де неможливо знайти навіть власний рядок виводу "Hello, World!".
Крім того, розуміння структури проєкту — це та навичка, яку оцінять на співбесіді. Це як знати, де в оселі лежать ключі та пульт від телевізора — жити набагато простіше!
Для наочності уявімо, що наш C#-проєкт — це коробка з комірками:
MyFirstConsoleApp/
├── MyFirstConsoleApp.csproj
├── Program.cs
├── Properties/
│ └── launchSettings.json
├── bin/
│ └── ... (сюди потрапляє зібрана програма)
├── obj/
│ └── ... (сюди зберігаються проміжні файли компіляції)
Деталі структури:
| Імʼя | Для чого потрібно |
|---|---|
|
Файл проєкту: «паспорт» усієї вашої програми, тут зазначено всі налаштування проєкту. |
|
Головний файл із «точкою входу» (Main). Саме тут ви зазвичай пишете свій перший код. |
|
Папка з налаштуваннями проєкту, наприклад, способи запуску з IDE. |
|
«Кошик для готових продуктів» — туди потрапляє зібраний (скомпільований) виконуваний файл. |
|
Внутрішні робочі файли компіляції (як чорнетки під час написання роману — туди ви рідко заглядаєте). |
2. Файл проєкту (.csproj)
Файл із розширенням .csproj — це серце і мозок проєкту. Саме тут записані всі глобальні налаштування: версія мови, залежності, які файли треба компілювати, які пакети підключені тощо. Перемкніться у Solution Explorer на вкладку Files.
Приклад файлу для консольного застосунку:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
- <TargetFramework>net9.0</TargetFramework> — означає, що проєкт призначений для .NET 9.
- <OutputType>Exe</OutputType> — означає, що вийде виконуваний файл (.exe для Windows).
- У блоці <PropertyGroup> зберігаються основні параметри.
- У цьому файлі ви можете додавати додаткові NuGet-пакети, змінювати налаштування компіляції, вмикати/вимикати можливості.
3. Головний файл програми: Program.cs
Якщо порівнювати проєкт із театром, то Program.cs — це сцена, а всі інші файли — закулісся. Саме тут розміщується так звана «точка входу» застосунку — метод Main.
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Привіт, світ!");
}
}
}
- namespace — простір імен; він допомагає групувати класи та уникати конфліктів імен.
- class Program — основний клас, де розташований метод Main.
- static void Main(string[] args) — обов’язкова «точка входу»: звідси починається виконання програми.
- Console.WriteLine() — уже знайомий вам спосіб повідомити світу про свої думки.
Оновлюємо наш застосунок
У попередніх лекціях ми вже створювали мінізастосунок, який запитував імʼя користувача й вітав його. Ось приклад:
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.Write("Введіть своє імʼя: ");
string name = Console.ReadLine();
Console.WriteLine($"Вітаю, {name}! Живіть довго й процвітайте.");
}
}
}
Запустіть проєкт: клацніть зелену кнопку ▶️ Run.
Якщо все пройшло успішно, внизу з’явиться вкладка Run. Ви побачите, що програма запустилася і чекає вашої відповіді на запитання Введи своє ім'я:. Введіть будь-яке імʼя (наприклад, «Кіт») просто в цій консолі й натисніть клавішу Enter.
Одразу після натискання Enter програма обробить ваше введення й виведе фінальне повідомлення з вашим імʼям. Програма завершила роботу, і ми бачимо результат.
4. Як писати свій код: основні правила
Де писати код?
Основну логіку спочатку краще писати у файлі Program.cs у методі Main. Коли застосунок виросте, ви створюватимете нові файли та класи, але поки не стрибайте вище голови — найцікавіше відбувається саме тут.
Що можна (і що не можна) робити в Main?
- Можна: оголошувати змінні, писати обчислення, викликати методи, виводити/зчитувати дані.
- Не можна: писати код «поза» методами чи класами (наприклад, просто рядок Console.WriteLine("Hello"); поза Main — так не робіть!).
Коментарі
Коментуйте код для себе й для інших. Для однорядкових коментарів використовуйте //, для багаторядкових — /* ... */. Чим простіше потім здогадатися, навіщо ви написали цей загадковий шматок коду, тим краще.
// Це однорядковий коментар
/*
А це —
багаторядковий.
*/
5. Як відбувається виконання програми?
Ваша програма завжди починає виконання з методу Main. Усе, що розташоване поза цим методом, ігнорується. Хочете щось виконати під час запуску? Розмістіть це в Main.
Приклад — спрощена блок-схема (код → запуск):
Початок програми
|
v
Метод Main
|
v
Виконання інструкцій всередині Main (по порядку)
|
v
Кінець програми
6. Як ваш застосунок росте: додавання нових файлів
Коли варто створювати новий файл?
Коли ваш код уже не вміщується на один екран, а змінні не тримаються в голові, настав час розбити його на частини.
Приклад: якщо ви робите калькулятор, то можна створити окремий файл Calculator.cs і перенести туди окремий клас.
MyFirstConsoleApp/
├── Program.cs
├── Calculator.cs // Новий файл з логікою калькулятора
Як додати новий файл у Rider
- У дереві Solution Explorer клацніть правою кнопкою миші по проєкту → «Add» → «New File» (або «New Class»).
- Надайте файлу змістовну назву.
- Напишіть у файлі новий клас або метод.
// Calculator.cs
namespace MyFirstConsoleApp
{
class Calculator
{
public static int Add(int a, int b)
{
return a + b;
}
}
}
А тепер використаємо його з Program.cs:
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
int sum = Calculator.Add(2, 3); // Використовуємо метод Add із класу Calculator
Console.WriteLine($"2 + 3 = {sum}");
}
}
}
7. «Збірка» і «Запуск» — що відбувається під капотом?
Коли ви натискаєте Run (або F5), IDE:
- Перевіряє синтаксис і збирає ваш код у бінарний файл (.exe або .dll) у папку bin/Debug/net9.0/ або bin/Release/net9.0/.
- Запускає зібраний файл.
- Виводить результат у термінал/консоль, яку ви бачите.
bin/ і obj/: навіщо потрібні ці папки?
- bin/ — тут лежить ваш готовий продукт (зібрані програми).
- obj/ — тут зберігаються тимчасові файли, які потрібні компілятору для проміжних обчислень.
Зазвичай ці папки можна просто ігнорувати, їхній вміст автоматично буде перезібрано за потреби.
8. Часті помилки під час написання коду і роботи з проєктом
Писати код — це не просто натискати клавіші навмання. Щойно з’являються помилки на кшталт CS5001: Program does not contain a static 'Main' method suitable for an entry point, починаються пошуки розв’язань в інтернеті, а IDE «свариться» ще складнішою мовою.
- Одна з частих помилок — код поза методом або класом. У C# не можна просто написати вираз прямо у файлі програми. Усе має бути всередині класу й методу!
- Різні імена файлів і класів. Так можна, але краще давати файлам і класам однакові, зрозумілі імена — для вашої (і вашого майбутнього колеги) зручності.
- Заплуталися у просторах імен. Якщо ви створили клас в іншому просторі імен (namespace), не забудьте підключити його через using.
- Забули про «точку входу». Якщо ви видалили або перейменували метод Main, програма не запуститься.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ