Почему используются статические классы?

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

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

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


person nehakapoor2010    schedule 09.02.2010    source источник
comment
Интересные вопросы по теме: метод stackoverflow.com/questions/169378/ stackoverflow.com/questions/731763/ stackoverflow.com/questions/241339/   -  person Jla    schedule 09.02.2010


Ответы (6)


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

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

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

person Finglas    schedule 09.02.2010
comment
Вы должны заметить, что упомянутый мной прирост производительности тривиален. - person Finglas; 09.02.2010
comment
В C # есть метод, скрывающийся с помощью ключевого слова new, что, хотя это не то же самое, я нашел для него одно применение в своей работе над C #. Тем не менее, он грязный и, будучи TDDer, я избегаю статики, если только она не попадает в сегмент служебных классов. - person Finglas; 09.02.2010
comment
Классы утилит не должны быть статичными. FileInfo - это во многом служебный класс, он не статичен. Может, утилитарные методы. - person Hans Passant; 09.02.2010

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

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

person Hans Passant    schedule 09.02.2010

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

person Erich Kitzmueller    schedule 09.02.2010

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

person Kerido    schedule 09.02.2010

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

person Sergey Mirvoda    schedule 09.02.2010

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

person Community    schedule 01.02.2014