Уявіть, що ви розробник у 2000-му році. Ви хочете створити застосунок, який працюватиме на Windows, виконуватиме складні бізнес-операції, взаємодіятиме з базами даних і забезпечуватиме безпеку даних користувачів. У вас є кілька варіантів:
Microsoft створила .NET Framework як відповідь на цей виклик. Сьогодні .NET — це потужна, кросплатформенна екосистема для створення будь-яких типів застосунків.

| Характеристика | .NET Framework | .NET Core | Modern .NET (5+) |
|---|---|---|---|
| Платформи | Windows only | Windows, Linux, macOS | Windows, Linux, macOS, mobile, IoT |
| Open Source | ❌ Ні | ✅ Так | ✅ Так |
| Продуктивність | Базова | Висока | Надзвичайно висока |
| Deployment | System-wide | Side-by-side | Side-by-side + Native AOT |
| Підтримка | До 2029 (.NET Framework 4.8) | Завершено | Активна (LTS: .NET 10) |
| Use Cases | Legacy apps, WinForms, WPF | Modern web, microservices | Усе: web, mobile, desktop, cloud, ML |
.NET (дотнет) — це безкоштовна, кросплатформенна, відкрита (open-source) платформа розробки від Microsoft для створення різноманітних типів застосунків: веб-додатків, мобільних аплікацій, desktop-програм, хмарних сервісів, ігор, IoT-рішень та систем машинного навчання.
Runtime (CLR)
Base Class Library (BCL)
Languages
Уявіть .NET як універсальну кухню з професійним обладнанням:

CLR завантажує ваш скомпільований код (IL) та перевіряє його безпеку типів (type safety). Це означає, що неможливо випадково звернутися до пам'яті, на яку ви не маєте права.
Just-In-Time Compiler перетворює IL-код у нативний машинний код безпосередньо під час виконання. Це відбувається один раз для кожного методу при першому виклику.
Garbage Collector (GC) автоматично відстежує об'єкти в пам'яті та звільняє ті, які більше не використовуються. Ви не пишете free() або delete як у C++.
CLR централізовано обробляє виняткові ситуації (exceptions) та забезпечує структурований механізм відновлення.
Code Access Security (CAS) та інші механізми контролюють, які операції дозволені вашому коду (доступ до файлів, мережі тощо).

using System;
public class Program
{
public static void Main()
{
Console.WriteLine("Hello, .NET!");
}
}
.method public static void Main() cil managed
{
.entrypoint
.maxstack 8
// Load string onto stack
ldstr "Hello, .NET!"
// Call Console.WriteLine
call void [System.Console]System.Console::WriteLine(string)
// Return from method
ret
}
; Simplified representation
mov rcx, offset string_literal
call System.Console.WriteLine
ret
Modern .NET використовує багаторівневу компіляцію (Tiered Compilation):
| Tier | Опис | Переваги | Коли використовується |
|---|---|---|---|
| Tier 0 | Швидка, мінімально оптимізована компіляція | Швидкий старт застосунку | Перший виклик методу |
| Tier 1 | Повна оптимізація з профілюванням | Максимальна продуктивність | Після збору статистики (hot paths) |
RyuJIT — це назва сучасного JIT-компілятора в .NET. Він виконує численні оптимізації:
Замість виклику маленького методу, JIT вставляє його код безпосередньо у місце виклику, усуваючи overhead виклику функції.
public int Add(int a, int b) => a + b;
public void Calculate()
{
int result = Add(5, 10); // Method call overhead}
public void Calculate()
{
int result = 5 + 10; // No method call, direct calculation}
JIT може розгорнути малі цикли для зменшення кількості перевірок умов і збільшення інструкцій, які CPU може виконати паралельно.
int sum = 0;
for (int i = 0; i < 4; i++)
{
sum += array[i];
}
int sum = 0;
sum += array[0];
sum += array[1];
sum += array[2];
sum += array[3];
// Fewer branch predictions, better CPU pipelining
RyuJIT автоматично використовує SIMD (Single Instruction, Multiple Data) інструкції процесора для обробки декількох значень одночасно.
// System.Numerics.Vectors example
using System.Numerics;
Span<float> values = stackalloc float[8] { 1, 2, 3, 4, 5, 6, 7, 8 };
Span<float> results = stackalloc float[8];
var vector1 = new Vector<float>(values);
var vector2 = new Vector<float>(2.0f); // All elements = 2.0
var resultVector = vector1 * vector2; // Multiplies 8 floats in ONE CPU instructionresultVector.CopyTo(results);
// Results: [2, 4, 6, 8, 10, 12, 14, 16]
CTS — це специфікація, яка визначає, як типи даних описуються та використовуються в .NET. Вона забезпечує сумісність між мовами.
// MyLibrary.dll
namespace MathLib
{
public class Calculator
{
public int Add(int a, int b) => a + b;
}
}
// F# can use C# library seamlessly
open MathLib
let calc = Calculator()
let result = calc.Add(10, 20) // Returns 30
printfn "Result: %d" result
CLS — це підмножина CTS, яка визначає мінімальний набір функцій, які повинен підтримувати будь-який .NET-сумісний компілятор.
Наприклад:
public UInt32 GetId() — UInt32 не CLS-compliantpublic int GetId() — int (Int32) CLS-compliant
| IDE | Платформа | Ліцензія | Переваги | Недоліки | Рекомендовано для |
|---|---|---|---|---|---|
| Visual Studio | Windows, macOS | Community: Free Pro/Enterprise: Paid | Найпотужніший debugger, інтеграція з Azure, GUI-дизайнери | Важкий, повільний на старих ПК | Enterprise-розробка, WPF, WinForms |
| JetBrains Rider | Win, Mac, Linux | Платна (підписка) | Швидкий, інтелектуальний ReSharper, кросплатформенний | Потребує підписку | Професійна розробка, великі проєкти |
| VS Code + C# Dev Kit | Win, Mac, Linux | Безкоштовна | Легкий, швидкий, розширюваний, великий Marketplace | Менше функцій для складного debugging | Web-розробка, скрипти, легкі проєкти |
Відвідайте офіційний сайт: https://dotnet.microsoft.com/download
Завантажте останню LTS (Long-Term Support) версію — . NET 10.
winget install Microsoft.DotNet.SDK.10
choco install dotnet-sdk -y
scoop install dotnet-sdk
brew install --cask dotnet-sdk
sudo apt-get update
sudo apt-get install -y dotnet-sdk-10.0
Відкрийте термінал та виконайте:
dotnet --version
Очікуваний вивід:
10.0.100
| Команда | Опис | Приклад |
|---|---|---|
dotnet new | Створює новий проєкт з шаблону | dotnet new console -n MyApp |
dotnet build | Компілює проєкт | dotnet build |
dotnet run | Компілює та запускає проєкт | dotnet run |
dotnet watch | Автоматично перекомпілює при змінах | dotnet watch run |
dotnet publish | Публікує застосунок для deployment | dotnet publish -c Release |
dotnet add package | Додає NuGet-пакет | dotnet add package Newtonsoft.Json |
dotnet restore | Відновлює залежності | dotnet restore |
dotnet test | Запускає тести | dotnet test |
dotnet new console -n HelloDotNet
cd HelloDotNet
Ця команда створює консольний застосунок з назвою HelloDotNet.
// Top-level statements (C# 9+)
Console.WriteLine("Hello, World!");
dotnet run
Вивід:
Hello, World!
dotnet watch run
Тепер змініть Program.cs:
Console.WriteLine("Hello, .NET! 🚀");
Збережіть файл — застосунок автоматично перезапуститься!
dotnet publish -c Release -r win-x64 --self-contained
Пояснення:
-c Release → Оптимізована збірка (Release mode)-r win-x64 → Runtime Identifier (Windows 64-bit)--self-contained → Включає .NET runtime у пакет (не потребує встановленого .NET на цільовій машині)dotnet watch під час розробки — це заощаджує величезну кількість часу, автоматично перекомпілюючи код при кожній зміні.Modern .NET еволюціонує з неймовірною швидкістю. Ось найважливіші інновації останніх версій:
| Функція | Опис | Переваги |
|---|---|---|
| Discriminated Unions | Нативна підтримка union types (як у F#) | Безпечніша робота з варіантами типів |
| Primary Constructors Enhanced | Розширення на всі типи класів | Менше boilerplate коду |
| Performance Improvements | SIMD, PGO за замовчуванням, оптимізації GC та компілятора | До 40% швидше у веб-сценаріях порівняно з .NET 8 |
| Native AOT Maturity | Покращена підтримка Ahead-of-Time компіляції | Startup за <1ms, менший розмір (~10MB standalone apps) |
| JSON Source Generators v3 | Нове покоління source generators для System.Text.Json | Найшвидша серіалізація, zero-allocation |
| Blazor Enhancements | WebAssembly preloading, form validation improvements | Кращий UX для веб-застосунків |
| Версія | Тип підтримки | Підтримка до | Ключові особливості |
|---|---|---|---|
| .NET 8 | LTS | Листопад 2026 | Blazor SSR, TimeProvider, Native AOT improvements |
| .NET 9 | STS | Травень 2026 | Hybrid Cache, LINQ improvements (CountBy, AggregateBy), OpenAI SDK |
| .NET 10 | LTS | Листопад 2028 | Discriminated Unions, Performance boost, Enhanced Primary Constructors |
Reflector (Decompiler) — це інструмент, який перетворює скомпільований .NET код (IL) назад у читабельний C#/F# код. Оскільки IL містить багато метаданих (назви класів, методів, змінних), декомпіляція є дуже точною.
| Інструмент | Тип | Можливості | Use Cases |
|---|---|---|---|
| ILSpy | Open-source | Decompiler, Assembly Browser, Find References | Вивчення чужих бібліотек, reverse engineering |
| dnSpy | Open-source | Decompiler + Debugger + IL Editor | Налагодження сторонніх DLL, патчінг |
| dotPeek | Free (JetBrains) | Decompiler, Navigation, Export to Project | Дослідження коду, інтеграція з Rider |
| ILDasm | Official (Microsoft) | IL Viewer (не C#) | Перегляд raw IL коду |
namespace MyApp;
public class Calculator
{
private const string SecretKey = "MyPassword123";
public int Multiply(int a, int b)
{
return a * b;
}
}
dotnet build -c Release
bin/Release/net10.0/MyApp.dllSecretKey!
Obfuscator — це інструмент, який перетворює IL-код, роблячи його важким для читання та аналізу, але зберігаючи функціональність.
| Техніка | Опис | Приклад |
|---|---|---|
| Name Obfuscation | Заміна зрозумілих назв на випадкові | Calculator → A, Multiply → a1b2 |
| Control Flow Obfuscation | Ускладнення логіки (додавання мертвого коду, заплутування if) | if (true) → if (a ^ b == c) |
| String Encryption | Шифрування рядкових літералів | "MyPassword" → зашифрована послідовність |
| Anti-Tampering | Виявлення модифікацій коду | Перевірка checksum при старті |
| Anti-Debugging | Виявлення debugger | Debugger.IsAttached → Exit |
| Інструмент | Тип | Рівень захисту | Вартість |
|---|---|---|---|
| Dotfuscator | Commercial (Microsoft) | Високий (Enterprise: anti-tamper, watermarking) | Free (Community), Paid (Pro/Enterprise) |
| ConfuserEx | Open-source | Середній (name, control flow, constants) | Безкоштовно |
| SmartAssembly | Commercial (Red Gate) | Високий (feature merging, pruning) | Платний |
| .NET Reactor | Commercial | Високий (native code wrapping) | Платний |
public class Calculator
{
public int Multiply(int a, int b)
{
return a * b;
}
}
public class A
{
public int a(int b, int c)
{
int d = b;
int e = c;
return d * e;
}
}
✅ Використовуйте Reflectors
🔒 Використовуйте Obfuscators
Закріпіть отримані знання, пройшовши короткий тест:
Історія .NET
CLR Architecture
JIT Optimizations
CTS/CLS
.NET CLI
Modern Features
IL Tools
dotnet new console -n MyCalculator
Calculator з методами Add, Subtract, Multiply, Divide.Main та виведіть результати.Release:
dotnet publish -c Release
Calculator у Release mode.Add та подивіться IL код.Debug vs Release збірок (Release оптимізованіший).