Преимущества статического класса

Возможный дубликат:
Какая польза от статического класса

Каковы преимущества объявления статического класса?

public static class MyStaticClass
{
}

Есть ли что-то кроме "это не может быть создано"?
Зачем еще вам нужен статический класс, по каким причинам класс должен быть статическим?
Является ли "любой класс должен быть объявлен как статический, если он не предназначен для создания экземпляров" хорошее правило?

5 ответов

Решение

Если класс имеет модификатор static, тогда:

  • Это проясняет ваше намерение: это не просто класс, в котором есть все статические члены - это класс, который будет иметь только статические члены.
  • Вы предотвращаете создание экземпляров без необходимости использования частного конструктора только для того, чтобы подавить общедоступный конструктор по умолчанию
  • Вы не можете объявлять переменную этого типа
  • Вы не можете использовать этот тип в качестве аргумента типа (во всяком случае, IIRC)
  • Вы можете объявить методы расширения в типе, если это тип верхнего уровня

Первый пункт самый важный, хотя, ИМО. Вы сообщаете о намерениях как компилятору, так и другим разработчикам.

Статические классы полезны в качестве контейнеров для служебных функций и констант. Если класс не представляет объект и используется только для этой цели, имеет смысл объявить его статическим.

Статические классы и члены класса используются для создания данных и функций, к которым можно получить доступ, не создавая экземпляр класса. Статические члены класса могут использоваться для разделения данных и поведения, которое не зависит от какой-либо идентичности объекта: данные и функции не изменяются независимо от того, что происходит с объектом. Статические классы могут использоваться, когда в классе нет данных или поведения, которое зависит от идентичности объекта.

Взято из MSDN напрямую. Это объясняет это намного лучше, чем я. Ключевым фактом здесь является то, что объект сохраняется на протяжении всей жизни.

Методы расширения также должны быть написаны в статических классах. Я склонен использовать их для расширений строк или расширений коллекций.

Вам нужен статический класс для создания методов расширения.

Служебный класс, который объявляет только статические методы (например, System.IO.File), не предназначен для создания экземпляра, поэтому он обычно статический.

И вы правы, я считаю, что это хорошее применение. Синглтон отличается, так как он предназначен для частного использования.

Другие вопросы по тегам