JavaRush /Курсы /C# SELF /Статические поля и методы

Статические поля и методы

C# SELF
12 уровень , 1 лекция
Открыта

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. Сравниваем методы и поля

Что это? Как объявлять? Где хранится? Для чего? Как обращаться?
Поле объекта
public string Name;
В каждом объекте Личные данные объекта cat1.Name, cat2.Name
Метод объекта
public void Meow(){}
В каждом объекте Действия, которые используют поля объекта cat1.Meow()
Статическое поле
public static int C;
Одно на весь класс Общие данные для всех объектов Cat.C
Статический метод
public static ...
Одно на весь класс Общие “умения”, не зависящие от объекта 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, и все члены такого класса должны быть статическими.

2
Задача
C# SELF, 12 уровень, 1 лекция
Недоступна
Статическое поле для подсчета объектов
Статическое поле для подсчета объектов
2
Задача
C# SELF, 12 уровень, 1 лекция
Недоступна
Статический метод для проверки числа
Статический метод для проверки числа
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ