JavaRush /Курси /C# SELF /Синтаксис оголошення класу та його структура

Синтаксис оголошення класу та його структура

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

1. Загальна структура оголошення класу

Отже, уявіть: клас у C# — це креслення будинку. У кресленні ми описуємо, скільки кімнат, який колір стін, де розташовані двері й вікна. У класі — які властивості має об’єкт (наприклад, імʼя, вік) і що він уміє робити (наприклад, «привітатися», «попросити зарплату»).

Оголошення класу завжди містить чотири основні блоки:

  1. Модифікатор доступу (public, private, internal, protected) — хто може користуватися цим класом. Для простоти зараз будемо використовувати public, щоб клас був «видимий» всюди.
  2. Ключове слово class — щоб компілятор зрозумів, що ми дійсно описуємо клас.
  3. Імʼя класу — з великої літери, за конвенцією.
  4. Тіло класу у фігурних дужках — тут описуємо все, з чого складається наш клас: поля, властивості, методи.

Схематично це виглядає так:

public class Ім'яКласу
{
    // Тут будуть поля, властивості та методи класу
}
Оголошення класу в C#

Приклад: Клас студента

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 належить конкретному студенту, а насправді — всім одразу.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ