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, и все члены такого класса должны быть статическими.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ