Когда использовать статические классы и методы? - PullRequest
7 голосов
/ 15 июля 2010

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

Ответы [ 5 ]

6 голосов
/ 15 июля 2010

Я думаю, что следующие две ссылки предлагают четкий ответ на то, что вы ищете.Посмотрите на них:

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

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

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

Когда уместно использовать статические методы? ( Джон Скит [Гуру] ответил на это: o))

4 голосов
/ 15 июля 2010

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

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

Вот хорошая ссылка из блога по тестированию Google: Статические методы - Смерть тестируемости

1 голос
/ 15 июля 2010

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

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

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

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

1 голос
/ 15 июля 2010

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

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

0 голосов
/ 15 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...