Что такое модификатор static в C#?

«Что такое модификатор static в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Модификатор static в C# означает, что член (поле, свойство, метод, событие) или весь класс принадлежит самому типу, а не конкретному экземпляру (объекту) этого типа. Это позволяет использовать член без создания экземпляра класса.

Основные случаи использования:

  1. Статические члены класса:

    • Статические поля/свойства: Существуют в единственном экземпляре для всего приложения, общие для всех объектов класса. Часто используются для констант, настроек или кэшей.
    • Статические методы: Могут быть вызваны напрямую через имя класса. Не имеют доступа к нестатическим полям и методам, так как для них не существует контекста this.

      
      public class MathHelper
      {
      // Статическое поле-счётчик
      public static int CallCount { get; private set; } = 0;
      
      // Статический метод
      public static int Add(int a, int b)
      {
          CallCount++; // Увеличиваем общий счётчик
          return a + b;
      }
      }

    // Использование: int sum = MathHelper.Add(5, 3); // Вызов без создания объекта Console.WriteLine(MathHelper.CallCount); // 1

  2. Статический класс:

    • Нельзя создать его экземпляр с помощью new.
    • Может содержать только статические члены.
    • Часто используется для утилитарных классов (например, Math, Console).
      
      public static class Logger
      {
      public static void Log(string message)
      {
          Console.WriteLine($"[{DateTime.Now}] {message}");
      }
      }

    // Использование: Logger.Log("Application started");

Важно: Из-за общего состояния статические поля требуют осторожности в многопоточных сценариях, так как могут стать источником состояния гонки (race condition).