← Все вопросы

Что означает ключевое слово static в C# и зачем оно нужно?

Задан 8 месяцев назад755 просмотров2 ответа
8

Везде вижу static: static void Main, static поля, static классы. Что это вообще значит и когда метод/поле стоит делать статическим?

class MathHelper
{
    public static int Square(int x) => x * x;
}

Почему Square я могу вызвать без создания объекта?

2 ответа

14
✓ Принятый ответ — помог автору

static означает, что член принадлежит самому классу (типу), а не конкретному экземпляру. Поэтому статический метод вызывается через имя класса, без new.

class MathHelper
{
    public static int Square(int x) => x * x;
}

int r = MathHelper.Square(5); // 25, объект не нужен

Сравните с обычным (экземплярным) членом:

class Counter
{
    public static int Total;   // одна на весь класс
    public int Local;          // своя у каждого объекта
}

var a = new Counter();
var b = new Counter();
Counter.Total++;  // через класс
a.Local++;        // через объект

Когда использовать static:

  • методы, которые не зависят от состояния объекта (утилиты, чистые функции вроде Square, Math.Max);
  • поля/свойства, общие для всех экземпляров (счётчики, кэш, настройки);
  • классы целиком (static class), если это набор утилит и создавать экземпляр бессмысленно (например, Math, Console).

Важно: статический метод не может обращаться к нестатическим полям напрямую — у него нет конкретного объекта (this). Не злоупотребляйте статикой для изменяемого состояния: глобальные статические переменные усложняют тестирование и могут давать гонки в многопоточности.

5

Ещё бывает статический конструктор — он выполняется один раз при первом обращении к классу и инициализирует статические данные:

class Config
{
    public static readonly string Version;
    static Config()
    {
        Version = "1.0"; // выполнится один раз
    }
}

И static class нельзя инстанцировать и наследовать — в нём все члены обязаны быть static. Удобно для хелперов.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект