Когда использовать статические классы и методы?

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

5 ответов


Я думаю, что следующие две ссылки дать ответ за то, что вы ищете. Взгляните на них:--1-->

для статических классов:

когда использовать статические классы в C#

для статических методов:

когда целесообразно использовать статические методы? ( Джон Скит


одна вещь, которую нужно иметь в виду, - это последствия тестирования статических методов. Статический метод "уплотнения" много швы. Швы, где вы можете изменить поведение без изменения производственного кода; примеры подклассов или ссылки на библиотеку тестирования. Поскольку статические методы разрешаются во время компиляции и не связаны динамически, вы не можете бросить объект тестирования и изменить поведение статического метода. Тестирование этого класса будет утомительным.

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

вот хорошая ссылка из блога тестирования google:статические методы-это смерть для тестируемости


есть предыдущая запись вот кажется:когда использовать статические классы в C#

Я бы подумал, что статические классы предназначены для хранения функций или данных, которые вы хотите вызвать, без необходимости создавать объект для него. Если я помню, создание экземпляра объекта помещает его в память. И, следовательно, статический класс non object не входит в память? Давненько я взяла мою теорию классов ;( к сожалению.


Я думаю, что общее эмпирическое правило может заключаться в том, что функции полезности должны быть статическими. Типичным примером может быть то, как в любом языке ООП математический класс будет содержать статические методы, такие как sqrt (), поскольку на самом деле нет необходимости иметь что-то вроде отдельного математического объекта.

Что касается статических классов, вы должны думать о классах, сохраняющих форму состояния, как правило, как информация о сеансе, которая необходима независимо от точного пути, пройденного через ваше приложение, и из которых вам обычно нужен именно один. (подумайте о своем браузере, вероятно, всегда сохраняя ровно 1 cookie-jar, как класс)

статические переменные являются менее злым близнецом глобальных переменных (они сохраняют свое значение, но с их областью действия, ограниченной функцией), которые обычно полезны либо для сохранения некоторой формы состояния (например, кэширование данных), либо для перечисления вещей, которые должны быть уникальными, но нумерация которых не очень важна вне области вашей функции или приложения (скажем, нумерация отладка или профилирование криков из вашей собственной отладки("..") или функции профиля ())

в основном, используйте только любой из них, когда вы очень уверены, что делать вещи "правильно" ООП-как путь приведет к созданию монстра.


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