1. Загальна структура оголошення класу
Отже, уявіть: клас у C# — це креслення будинку. У кресленні ми описуємо, скільки кімнат, який колір стін, де розташовані двері й вікна. У класі — які властивості має об’єкт (наприклад, імʼя, вік) і що він уміє робити (наприклад, «привітатися», «попросити зарплату»).
Оголошення класу завжди містить чотири основні блоки:
- Модифікатор доступу (public, private, internal, protected) — хто може користуватися цим класом. Для простоти зараз будемо використовувати public, щоб клас був «видимий» всюди.
- Ключове слово class — щоб компілятор зрозумів, що ми дійсно описуємо клас.
- Імʼя класу — з великої літери, за конвенцією.
- Тіло класу у фігурних дужках — тут описуємо все, з чого складається наш клас: поля, властивості, методи.
Схематично це виглядає так:
public class Ім'яКласу
{
// Тут будуть поля, властивості та методи класу
}
Приклад: Клас студента
public class Student
{
// Поля (змінні, що належать об'єкту)
public string Name;
public int Age;
}
Поки що цей клас — як порожня коробка: ми вказали, що студент має імʼя й вік, але ще не навчили його нічого.
2. Поля класу (fields)
Поля — це змінні, які належать об’єкту класу. Наприклад, у кожного студента має бути своє імʼя і свій вік — тому їх описують як поля:
public class Student
{
public string Name;
public int Age;
}
Тепер, коли ви створюєте об’єкт типу Student, кожен об’єкт матиме власні імʼя та вік.
Приклад створення об’єкта:
Student sasha = new Student();
sasha.Name = "Саша";
sasha.Age = 20;
Тут ми створили об’єкт sasha, а потім окремо присвоїли його полям значення. Такий підхід використовують для найпростішого старту (про конструктори дуже детально поговоримо на наступній лекції).
3. Методи класу (methods)
Методи — це «дієслова» об’єкта, тобто його поведінка: дії, які він уміє виконувати. Наприклад, студент може привітатися. Для цього всередині класу оголошують метод:
public class Student
{
public string Name;
public int Age;
public void SayHello()
{
Console.WriteLine($"Привіт, мене звати {Name}, мені {Age} років!");
}
}
Тепер кожен студент може «привітатися» — причому використовуватиме власні імʼя й вік.
Приклад використання методу:
Student sasha = new Student();
sasha.Name = "Саша";
sasha.Age = 20;
sasha.SayHello(); // Виведе: Привіт, мене звати Саша, мені 20 років!
4. Властивості класу (properties)
Властивості — це «розумні» поля, у яких можна задати особливі дії під час читання чи запису значення. У сучасному C# властивості використовують частіше, ніж поля, оскільки вони дають більше контролю й гнучкості. Здається просто, а можливостей — море.
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
Тут get; set; автоматично створюють поле, але дозволяють у майбутньому додати логіку під час зміни значення. Для користувача класу властивості виглядають майже так само, як поля.
Приклад:
Student katya = new Student();
katya.Name = "Катя";
katya.Age = 18;
Console.WriteLine(katya.Name); // Катя
Детальніше про властивості класу — у наступних лекціях.
5. Коментарі
Не найцікавіша, але важлива тема! Як і в будь-якому іншому коді, всередині класу можна і треба писати коментарі, щоб пояснювати, навіщо потрібне те чи інше поле або метод:
public class Student
{
// Імʼя студента
public string Name { get; set; }
// Вік студента (у роках)
public int Age { get; set; }
// Студент вітається
public void SayHello()
{
Console.WriteLine($"Привіт, мене звати {Name}, мені {Age} років!");
}
}
Це підвищує читабельність і допомагає не загубитися навіть у великому проєкті.
6. Модифікатори доступу
Модифікатори доступу — майже як двері з різними замками. Вони визначають, хто і звідки може звертатися до членів класу. Основні модифікатори:
- public: доступно всюди (використовуємо в прикладах).
- private: доступно лише всередині цього класу.
- internal: доступно в межах поточної збірки (проєкти, бібліотеки).
- protected: доступно всередині класу та його нащадків.
Приклад для поля, яке приховано від зовнішнього світу:
public class Student
{
private int age; // Тільки всередині Student
public string Name { get; set; }
public void SetAge(int value)
{
if (value > 0)
age = value;
}
public int GetAge()
{
return age;
}
}
На початку навчання часто всі члени оголошують public, щоб не плутатися, але в реальних проєктах це погана практика: деталі реалізації краще приховувати.
7. Статичні члени класу
Іноді клас має такі дані або методи, які належать не окремому об’єкту, а всьому класу одразу. Це — статичні члени (static members).
Наприклад: ми хочемо вести загальний лічильник студентів.
public class Student
{
public static int StudentsCount = 0;
public string Name { get; set; }
public int Age { get; set; }
}
Доступ до статичного члена здійснюється через імʼя класу:
Student.StudentsCount = 0;
У кожного об’єкта свої властивості/поля, а от статичні — спільні для всіх. У прикладі вище, якщо у нас 10 студентів, у кожного своє Name, але StudentsCount — один на всіх.
8. Приклад: Повний клас студента (версія з методами)
Зберімо все докупи й створімо клас студента, який усе вміє і правильно оформлений:
public class Student
{
// Статичний лічильник студентів — належить до всіх студентів
public static int Count = 0;
// Імʼя й вік — властивості
public string Name { get; set; }
public int Age { get; set; }
// Конструктор (про конструктори — у наступній лекції)
public Student(string name, int age)
{
Name = name;
Age = age;
Count++; // Щоразу під час створення об'єкта збільшуємо лічильник
}
// Метод для привітання
public void SayHello()
{
Console.WriteLine($"Привіт! Я {Name}. Мені {Age} років.");
}
}
Використання в основному застосунку:
class Program
{
static void Main()
{
Student sasha = new Student("Саша", 20);
Student katya = new Student("Катя", 22);
sasha.SayHello();
katya.SayHello();
Console.WriteLine($"Усього студентів: {Student.Count}");
}
}
9. Організація коду: один файл = один клас
У .NET прийнято розміщувати кожен публічний клас в окремому файлі з іменем, що збігається з іменем класу. Наприклад:
Student.cs
|
|__ public class Student
А в основному файлі програми (Program.cs) — точка входу й основний код. Це полегшує навігацію в проєкті, особливо коли класів стає багато.
10. Типові помилки при роботі з класами та об’єктами
Помилка № 1: забули фігурні дужки або написали їх не там.
Компілятор одразу видасть помилку, але не завжди зрозуміло, у чому справа. Особливо якщо дужки «поїхали» в довгій конструкції — знайти, де все зламалося, буває непросто.
Помилка № 2: оголосили два класи з однаковим імʼям в одному просторі імен.
Такий «креатив» компілятор не схвалить. І добре — інакше ви б самі не розібралися, до якого класу звертаєтеся.
Помилка № 3: випадково дали полю те саме імʼя, що й властивості.
Це створює плутанину під час звернення до членів класу. Навіть досвідчені розробники іноді хапаються за голову: «Це я до поля чи до властивості звертаюся?»
Помилка № 4: не вказали модифікатор доступу.
За замовчуванням клас стає internal, і якщо ви пишете бібліотеку — це може несподівано обмежити доступ до класу ззовні.
Помилка № 5: звернення до статичних членів через примірник.
Якщо написати student.Count замість Student.Count, компілятор може й не заборонити, але це збиває з пантелику. Так ви ніби кажете, що Count належить конкретному студенту, а насправді — всім одразу.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ