AAcademyCloud
C# та .NET
Безкоштовний урок-прев'ю

.NET, SDK і перша програма

C# — мова, якою пишуть Unity-ігри, банківський бекенд, десктоп під Windows і кросплатформні сервіси. Створена в Microsoft у 2000-му як відповідь Java, за чверть століття вона обігнала прототип у багатьох речах: records, pattern matching, async/await з'явилися тут раніше.

.NET, .NET Framework, Mono — що є що

Плутанина в назвах — перше, об що спотикаються новачки.

  • .NET Framework (1.0–4.8) — стара платформа, тільки Windows. Досі жива в корпоративних системах, нових проєктів на ній не починають
  • .NET Core.NET 5+ — сучасна кросплатформна платформа. Просто .NET. Це те, що тобі потрібно
  • Mono — стороння реалізація, на якій довго працював Unity

Ми працюємо з сучасним .NET. Актуальна LTS-версія на момент курсу — .NET 8; усе написане працює і в новіших.

Встановлення

Завантаж .NET SDK з dotnet.microsoft.com. SDK містить компілятор, рантайм і CLI. Перевір:

dotnet --version
dotnet --list-sdks

Редактор. Visual Studio (Windows, Community безкоштовна) — найповніший. JetBrains Rider — найкращий кросплатформний. VS Code + розширення C# Dev Kit — легкий варіант, працює скрізь.

Перший проєкт

dotnet new console -o HelloApp
cd HelloApp
dotnet run

Три команди — і в консолі Hello, World!.

Що всередині:

HelloApp/
├── HelloApp.csproj    ← опис проєкту
├── Program.cs         ← код
└── obj/, bin/         ← результати збірки, у git не кладуть

HelloApp.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

Два останні рядки важливі:

  • ImplicitUsings автоматично підключає найчастіші простори імен (System, System.Collections.Generic, System.Linq), тому файл не починається зі стіни using
  • Nullable вмикає перевірку посилань на null. Це найкорисніша річ у сучасному C# — про неї в наступному уроці

Top-level statements

Program.cs у новому проєкті виглядає так:

Console.WriteLine("Hello, World!");

Один рядок. Компілятор сам обгортає це в клас із методом Main. Класичний вигляд теж працює:

namespace HelloApp;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

У навчальних прикладах зручніші top-level statements, у великих проєктах — явний Main.

Трохи коду

Console.Write("Як тебе звати? ");
string? name = Console.ReadLine();

if (string.IsNullOrWhiteSpace(name))
{
    Console.WriteLine("Ім'я не введено.");
    return;
}

Console.WriteLine($"Привіт, {name}!");

for (int i = 1; i <= 3; i++)
{
    Console.WriteLine($"Рядок {i}");
}
  • $"…" — інтерполяція рядків, читабельніша за конкатенацію
  • string? — рядок, який може бути null. Console.ReadLine() справді повертає null при кінці потоку, і компілятор про це нагадає

Як влаштоване виконання

C# не компілюється одразу в машинний код. Крок за кроком:

  1. Компілятор перетворює .cs на IL — проміжну мову
  2. IL лягає в збірку (.dll або .exe)
  3. Під час запуску JIT компілює IL у машинний код конкретного процесора
  4. CLR керує пам'яттю: виділяє, збирає сміття, стежить за типами

Практичний висновок: перший виклик методу трохи повільніший (JIT працює), далі — швидкість, близька до нативної. І пам'ять ти не звільняєш вручну — це робить збирач сміття.

CLI, який знадобиться

dotnet new console -o Name    # консольний проєкт
dotnet new classlib -o Lib    # бібліотека
dotnet new webapi -o Api      # веб-API
dotnet new sln                # рішення

dotnet build                  # зібрати
dotnet run                    # зібрати й запустити
dotnet test                   # тести
dotnet add package Newtonsoft.Json   # залежність
dotnet format                 # форматування

Практика

  1. Створи консольний проєкт і запусти його.
  2. Напиши програму, що питає ім'я й рік народження, а виводить вік.
  3. Обробі випадок, коли рік ввели не числом — int.TryParse тобі знадобиться.
  4. Відкрий .csproj і переконайся, що Nullable увімкнено.

Підсумок

  • Сучасна платформа називається просто .NET, .NET Framework — легасі
  • dotnet new / build / run — три команди, які покривають старт
  • ImplicitUsings і Nullable у .csproj варто лишати увімкненими
  • Код → IL → JIT → машинний код; пам'яттю керує GC

Далі — система типів.

Сподобався урок?

Придбайте повний курс, щоб отримати доступ до всіх уроків.

Перейти до курсу