2010-07-14 2 views
7

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

ответ

1

Там это предыдущая запись здесь выглядит следующим образом: When to use static classes in C#

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

+0

Статический конструктор вызывается только один раз, и статический класс остается в памяти на всю жизнь домена приложения, в котором находится ваша программа. - http://msdn.microsoft.com/en-us/library/79b3xss3.aspx –

0

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

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

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

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

0

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

4

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

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

Вот хорошая ссылка из тестового блога Google: Static Methods are Death to Testability

+0

Удивительный пост - я волнующая любовь Мишко Хевери. Вы видели его Google Tech Talks? (Я думаю, что это был разговор под названием «Чистые кодовые разговоры - модульное тестирование», хотя все его разговоры стоят того.) Эти разговоры вызвали у меня потрясающий когнитивный момент сверхновой для меня, сплавляя МОК и TDD в какой-то эпическое мега оружие. –

+0

«Статический метод« уплотняет »много швов». не важно для низкоуровневых методов, но importatn для методов более высокого уровня. – Raedwald