1. Поля обʼєкта: тут обʼєкт зберігає свої дані
У C# (і взагалі у більшості мов програмування) часто кажуть: «усе — обʼєкт». Обʼєкт — це «віртуальний предмет» у памʼяті компʼютера, який може щось зберігати (дані) і виконувати дії (методи). Іншими словами, обʼєкт має стан (поля, дані) і поведінку (методи).
Приклади обʼєктів:
- Кіт у грі (Cat)
- Користувач сайту (User)
- Книга у бібліотеці (Book)
- Машина на паркінгу (Car)
Коли ви створюєте обʼєкт — ви ніби робите копію шаблону (класу), і ця копія може працювати зі своїми власними даними.
Поля — це змінні, що містяться всередині обʼєкта і зберігають його індивідуальні дані.
Приклад з життя
У кожного кота є імʼя, вік, колір. Ці дані індивідуальні — у кожного кота свої.
public class Cat
{
public string Name; // Імʼя кота — поле обʼєкта
public int Age; // Вік кота — поле обʼєкта
public string Color; // Колір кота — поле обʼєкта
}
Коли створюємо обʼєкти:
Cat cat1 = new Cat();
cat1.Name = "Барсик";
cat1.Age = 2;
cat1.Color = "сірий";
Cat cat2 = new Cat();
cat2.Name = "Мурка";
cat2.Age = 5;
cat2.Color = "чорний";
У кожного обʼєкта — свої значення полів!
| Обʼєкт | Name | Age | Color |
|---|---|---|---|
| cat1 | Барсик | 2 | сірий |
| cat2 | Мурка | 5 | чорний |
Поле — це внутрішня «кишеня» обʼєкта, куди він може щось покласти.
2. Методи обʼєкта: що обʼєкт уміє робити
Метод — це дія, уміння або функція обʼєкта. Це фрагмент коду, який можна викликати в обʼєкта.
Приклад з життя
У кота є дії: він може нявкати, бігати, їсти.
public class Cat
{
public string Name;
public void Meow()
{
Console.WriteLine($"{Name} каже: Мяу!");
}
public void Sleep()
{
Console.WriteLine($"{Name} спить.");
}
}
Використання:
Cat cat1 = new Cat();
cat1.Name = "Барсик";
cat1.Meow(); // Барсик каже: Мяу!
cat1.Sleep(); // Барсик спить.
У кожного обʼєкта — свої методи, і вони використовують його особисті поля!
3. Статичні поля (static fields): спільні дані
Іноді потрібно зберігати в полі не індивідуальні дані обʼєкта, а спільну інформацію для всього класу. Наприклад, рахувати, скільки котів створено загалом, або задати спільну для всіх котів «максимальну гучність».
Для цього у C# використовують статичні поля — їх оголошують за допомогою слова static.
public class Cat
{
public string Name;
public static int Count = 0; // Статичне поле
public Cat(string name)
{
Name = name;
Count++; // Збільшуємо загальний лічильник котів
}
}
// Робота з класом Cat
Cat c1 = new Cat("Барсик");
Cat c2 = new Cat("Мурка");
Console.WriteLine(Cat.Count); // 2 — спільне для всіх обʼєктів
Статичне поле — одне на весь клас; його спільно використовують усі обʼєкти.
До нього зазвичай звертаються через імʼя класу: Cat.Count.
4. Статичні методи (static methods)
Статичний метод — це метод, який не привʼязаний до конкретного обʼєкта, а належить усьому класу.
- Такий метод можна викликати без створення обʼєкта.
- Всередині статичного методу не можна звертатися до звичайних (нестатичних) полів і методів — оскільки конкретного обʼєкта немає!
public class MathUtils
{
public static int Add(int a, int b)
{
return a + b;
}
}
Використання:
int sum = MathUtils.Add(2, 3); // 5
Статичні методи часто використовують для утиліт — функцій, які не залежать від стану обʼєкта.
Ви вже знайомі з багатьма статичними методами:
Console.WriteLine();
Console.ReadLine();
Math.Round();
Math.Truncate();
5. Порівнюємо методи і поля
| Що це? | Як оголошувати? | Де зберігається? | Для чого? | Як звертатися? |
|---|---|---|---|---|
| Поле обʼєкта | |
У кожному обʼєкті | Особисті дані обʼєкта | cat1.Name, cat2.Name |
| Метод обʼєкта | |
У кожному обʼєкті | Дії, що використовують поля обʼєкта | cat1.Meow() |
| Статичне поле | |
Одне на весь клас | Спільні дані для всіх обʼєктів | Cat.C |
| Статичний метод | |
Одне на весь клас | Спільні «уміння», які не залежать від обʼєкта | Cat.Method() |
7. Ілюстрація
Звичайні поля й методи:
. +-----------------+
cat1: | Name = "Барсик" |
| Age = 2 |
+-----------------+
+------------------+
cat2: | Name = "Мурка" |
| Age = 5 |
+------------------+
Статичне поле Count:
Cat.Count = 2 // одне спільне для всіх котів
Виклик методів:
cat1.Meow(); // Барсик каже: Мяу!
cat2.Meow(); // Мурка каже: Мяу!
Виклик статичного методу:
MathUtils.Add(2, 3); // 5
Підсумки
- Поля — відповідають за індивідуальні характеристики кожного обʼєкта (властивості).
- Методи — описують, що вміє робити обʼєкт.
- Статичні поля — підходять для зберігання «спільних» даних (наприклад, лічильник, глобальні налаштування).
- Статичні методи — застосовують для операцій, які не залежать від конкретного обʼєкта (наприклад, математичні функції).
8. Часті запитання
Чи можна звернутися до статичного поля через обʼєкт?
Технічно — так (cat1.Count); однак прийнято звертатися через клас (Cat.Count), щоб не плутати себе й інших.
Чи можна викликати нестатичний метод без створення обʼєкта?
Ні, оскільки такий метод завжди працює з конкретним обʼєктом і його даними.
Чи можна у статичному методі використовувати звичайні поля й методи?
Ні — бо статичний метод не знає, до якого обʼєкта звертатися.
Чи можна створити «повністю статичний» клас?
Так, для цього оголошують static class — його не можна створити через new, і всі члени такого класу мають бути статичними.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ