Почему используются статические классы? - PullRequest
8 голосов
/ 09 февраля 2010

У меня есть сомнения по поводу статического класса и статических методов. Из MSDN я понял, что «Статические классы и члены класса используются для создания данных и функций, к которым можно обращаться без создания экземпляра класса».

Так что, если мы не хотим связывать класс с экземпляром, мы сделаем его статическим. Это единственное преимущество? Кто-нибудь может подсказать мне, в каком сценарии в реальном времени мы используем статический класс.

Некоторое время в классах (не статичных) я нахожу статические методы. Какое преимущество / преимущество производительности дают статические методы перед практическими методами.

Ответы [ 6 ]

19 голосов
/ 09 февраля 2010

Для служебных классов они хороши. Как вы упомянули, они похожи на глобальное состояние. Поэтому для классов, которые не имеют состояния, для повышения производительности класс должен быть статическим.

С другой стороны, статические классы сложно тестировать (если они содержат состояние). Полиморфизм и другие концепции ОО также теряются.

Используйте с умом.

6 голосов
/ 09 февраля 2010

Применение ключевого слова static к классу является языковым соглашением C #, оно ничего не значит для CLR. Он просто гарантирует, что все члены также являются статическими, и что вы не можете случайно создать экземпляр класса с ключевым словом new .

Достоинства статических методов обсуждаются в этой теме.

2 голосов
/ 09 февраля 2010

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

1 голос
/ 09 февраля 2010

Статические классы отлично подходят для определения статических методов. Это классический подход «полезного класса». Однако будьте предельно осторожны с сохранением состояния (то есть определения полей) в статическом классе. В нашем многопоточном мире это может привести к непредсказуемому поведению программы, если вы не синхронизируете доступ к статическим полям.

0 голосов
/ 01 февраля 2014

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

0 голосов
/ 09 февраля 2010

Статические свойства в основном используются для представления контекста запущенного кода. И вы можете найти подтверждение этому в каждой части стека .NET.
ASP.NET - HttpContext.Current
Threading - Thread.CurrentThread
WinForms - WindowsFormsSynchronizationContext.Current
WPF - Диспетчер
и т.д.
Для меня статический класс - это просто контейнер для служебных методов.

...