JavaRush /Курси /C# SELF /Занурюємося у C#-проєкт

Занурюємося у C#-проєкт

C# SELF
Рівень 5 , Лекція 4
Відкрита

1. Загальна структура C#-проєкту

Ваша програма — це не просто один файл, а ціла колекція файлів, папок і налаштувань. C# — мова суворо типізована, тому для великих застосунків важливо тримати все в належному порядку. Якщо ігнорувати структуру проєкту, ваш код швидко перетвориться на електронний лабіринт, де неможливо знайти навіть власний рядок виводу "Hello, World!".

Крім того, розуміння структури проєкту — це та навичка, яку оцінять на співбесіді. Це як знати, де в оселі лежать ключі та пульт від телевізора — жити набагато простіше!

Для наочності уявімо, що наш C#-проєкт — це коробка з комірками:

MyFirstConsoleApp/
├── MyFirstConsoleApp.csproj
├── Program.cs
├── Properties/
│    └── launchSettings.json
├── bin/
│    └── ... (сюди потрапляє зібрана програма)
├── obj/
│    └── ... (сюди зберігаються проміжні файли компіляції)

Деталі структури:

Імʼя Для чого потрібно
MyFirstConsoleApp.csproj
Файл проєкту: «паспорт» усієї вашої програми, тут зазначено всі налаштування проєкту.
Program.cs
Головний файл із «точкою входу» (Main). Саме тут ви зазвичай пишете свій перший код.
Properties/
Папка з налаштуваннями проєкту, наприклад, способи запуску з IDE.
bin/
«Кошик для готових продуктів» — туди потрапляє зібраний (скомпільований) виконуваний файл.
obj/
Внутрішні робочі файли компіляції (як чорнетки під час написання роману — туди ви рідко заглядаєте).

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("Привіт, світ!");
        }
    }
}
Мінімальний приклад Program.cs
  • 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

  1. У дереві Solution Explorer клацніть правою кнопкою миші по проєкту → «Add» → «New File» (або «New Class»).
  2. Надайте файлу змістовну назву.
  3. Напишіть у файлі новий клас або метод.
// 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, програма не запуститься.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ