Основи C# та .NET Framework

Методичка з об'єктно-орієнтованого програмування та платформи .NET

Різниці між об'єктно-орієнтованим та процедурним програмуванням

🎯 Ключова відмінність:

Об'єктно-орієнтоване програмування (ООП) відрізняється від процедурного програмування тим, що основний акцент ставиться не на алгоритми, а на розробку структур зберігання та управління даними.

Аспект Процедурне програмування Об'єктно-орієнтоване програмування
Основний фокус Алгоритми та функції Об'єкти та їх взаємодія
Організація коду Функції та процедури Класи та об'єкти
Підхід до даних Дані відокремлені від функцій Дані та методи об'єднані в класи
Принцип розробки "Що робити?" "Що представляє?"

Дві ролі класу

👥 Клас як модуль:

  • Архітектурна одиниця побудови програмної системи
  • Програма - це сукупність класів, об'єднаних у проекти та простори імен
  • Відповідає за структуру та організацію коду

📊 Клас як тип даних:

  • Має певну смислову нагрузку
  • Визначає структуру даних та поведінку об'єктів
  • Використовується для створення екземплярів (об'єктів)
Приклад класу в C# C#
using System;

// Клас як модуль та тип даних
// 🐸 Клас описує, що таке жаба
class Frog
{
    // ВЛАСТИВОСТІ - які дані є у жаби
    public string Name;
    public int JumpPower;
    public string Color;

    // КОНСТРУКТОР - метод для створення жаби з параметрами
    public Frog(string name, int jumpPower, string color)
    {
        Name = name;
        JumpPower = jumpPower;
        Color = color;
        Console.WriteLine($"Створено нову жабу: {name}!");
    }

    // МЕТОДИ - що може робити жаба
    public void Croak()
    {
        Console.WriteLine($"{Name}: Ква-ква! Я готова до біології!");
    }

    public void Jump()
    {
        Console.WriteLine($"{Name} ({Color}) стрибає на {JumpPower} см! 🐸");
    }
}

// 🎯 Програма створює КОНКРЕТНІ ОБ'ЄКТИ-жаби
class Program
{
    static void Main()
    {
        // Створюємо ОБ'ЄКТИ за допомогою конструктора
        Frog кваква = new Frog("Кваква", 42, "зелений");
        Frog леся = new Frog("Леся", 35, "коричневий");
        Frog бульба = new Frog("Бульба", 50, "жовтий");

        // Викликаємо методи об'єктів
        кваква.Croak();
        леся.Jump();
        бульба.Croak();
        бульба.Jump();
    }
} 

🎮 Гра: Створи свій об'єкт-жабу!

Клас: "Frog" 🐸

Спробуй створити різних жабок!

Платформа Microsoft .NET Framework

🏗️ Каркасний підхід - це як конструктор LEGO:

🔷 Каркас (постійна частина) - це як основа з LEGO, яка завжди однакова. Вона задає основну форму та структуру.

🔶 Змінні модулі (змінна частина) - це різні деталі LEGO, які ти вставляєш в основу.

.NET Framework
↓
Каркас
(Постійна частина)
+
Модулі
(Змінна частина)

Що таке Framework?

Фреймворк - це каркас, структура, яка надає:

  • 🔄 Єдність для всіх мов програмування
  • 📚 Стандартну бібліотеку класів
  • ⚡ Середовище виконання
  • 🔧 Інструменти розробки

Основні компоненти .NET Framework

📚 Статичний компонент - FCL (Framework Class Library):

  • Бібліотека класів каркаса
  • Типи даних, колекції, робота з файлами
  • Графічні інтерфейси, мережеві можливості

⚡ Динамічний компонент - CLR (Common Language Runtime):

  • Середовище виконання
  • Керування пам'яттю
  • Безпека виконання
  • Управління виключеннями

Бібліотека класів каркаса FCL

✈️ .NET - це як міжнародний аеропорт:

Різні мови програмування (C#, VB.NET) - це різні авіакомпанії

Примітивні типи - це як базові паспортні дані:

  • У C# цей тип називається int
  • У Visual Basic цей тип називається Integer
  • Але в обох випадках це той самий тип Int32 у системі .NET
Приклад типів у різних мовах C#
// C# розробник пише:
int number = 10;
Int32 sameNumber = 10; // те саме!

// VB розробник пише:
' Dim number As Integer = 10
' Dim sameNumber As Int32 = 10 ' те саме!
                    

Простір імен System

📚 FCL - це як величезна бібліотека:

Простору імен - це тематичні відділи в цій бібліотеці

System - головний відділ з основними "інструментами"

System
Int32, String, Console
Windows
Forms
Form, Button, TextBox
Робота з Windows Forms C#
using System.Windows.Forms;

// Створюємо вікно програми
Form myWindow = new Form();
myWindow.Text = "Моя перша програма!";

// Додаємо кнопку
Button button = new Button();
button.Text = "Натисни мене!";
button.Location = new Point(50, 50);
myWindow.Controls.Add(button);

// Запускаємо вікно
Application.Run(myWindow);
                    

CLR та двоетапна компіляція

🌍 Створення програми в .NET - це як подорож з перекладом мов:

📝 Етап 1: Написання коду на C#

🔨 Етап 2: Компіляція в IL (проміжну мову)

⚡ Етап 3: Виконання під керівництвом CLR

Код на C#
→
Компілятор C#
→
IL код
(PE-файл .exe/.dll)
→
CLR
(JIT компіляція)
→
Машинний код
→
Виконання

Що таке PE-файл?

📦 PE-файл містить:

  • Код на IL - універсальні інструкції
  • Метадані - інформація про код (як паспорт програми)
  • Маніфест - інформація про залежності

Типи файлів:

.exe - запускається як окрема програма

.dll - бібліотека для використання в інших програмах

Переваги CLR:

  • ♻️ Код на різних мовах працює разом
  • 💾 Ефективне використання пам'яті (збірка сміття)
  • 🛡️ Безпечне виконання ("пісочниця")
  • 🔄 Один код працює на різних системах
  • ⚡ JIT-компіляція (Just-In-Time)
Простий приклад програми C#
using System;

class Program
{
    static void Main()
    {
        // Цей код буде скомпільовано в IL
        int x = 12 * 30;
        Console.WriteLine(x); // Виведе: 360
        
        Console.ReadLine(); // Чекаємо натискання Enter
    }
}
                    

Синтаксис C# та основні прийоми

Робота з консоллю

Основи роботи з Console C#
using System; // імпорт простору імен System

class Program
{
    static void Main()
    {
        // Вивід тексту на консоль
        Console.WriteLine("Привіт, світ!");
        
        // Ввід даних з консолі
        Console.Write("Введіть ваше ім'я: ");
        string name = Console.ReadLine();
        
        Console.WriteLine($"Привіт, {name}!");
        
        // Робота з числами
        int number = 42;
        Console.WriteLine($"Число: {number}");
    }
}
                    

Директива using

Директива using дозволяє уникнути постійного вказіввання простору імен:

Без using vs З using C#
// Без using - потрібно повністю вказувати шлях
System.Console.WriteLine("Привіт");
System.Int32 number = 10;

// З using - простіше та чистіше
using System;

Console.WriteLine("Привіт");
int number = 10; // int == System.Int32
                    

Ключові слова та ідентифікатори

⚠️ Увага з ключовими словами:

Якщо хочете використовувати ідентифікатор з ім'ям, що конфліктує з ключовим словом, додайте префікс @

Робота з ключовими словами C#
// class class {...} // заборонено!
class @class {...} // дозволено

// Символ @ не є частиною ідентифікатора
@myVariable // те саме, що і myVariable
                    

Точка входу Main

Метод Main - це точка входу в програму. C# шукає статичний метод з ім'ям Main, який стає початком виконання.

Різні варіанти методу Main C#
// Найпростіший варіант
static void Main()
{
    Console.WriteLine("Привіт!");
}

// З поверненням коду помилки
static int Main()
{
    Console.WriteLine("Все добре!");
    return 0; // 0 = успіх
}

// З параметрами командного рядка
static int Main(string[] args)
{
    foreach (string arg in args)
    {
        Console.WriteLine(arg);
    }
    return 0;
}
                    

💡 Примеры задач

💡 Порада:

Якщо вашому методу Main потрібен доступ до закритих членів деякого класу, визначте метод Main всередині цього класу - це може бути простіше, ніж використання інструкцій верхнього рівня.