Используйте статический метод, если метод не принадлежит конкретному объекту.
Например, если вы посмотрите на класс Math в .NET Framework, вы увидите
что все методы являются статическими. Зачем? Потому что нет причин для создания
объект для использования методов. Почему вы хотите создать объект
Math
класс, когда все, что вы хотите, это абсолютная стоимость чего-либо? Не здесь
нет причин делать это, и поэтому метод является статическим.
Итак, когда вы разрабатываете класс, спросите себя:
Этот метод принадлежит объекту или самому классу?
Метод принадлежит объекту, если он изменяет состояние объекта. Если
метод не изменяет конкретный объект, он, скорее всего, может быть статическим.
Другой пример, предположим, что вы хотите знать, сколько объектов класса
что создано (не спрашивайте меня, почему ...). Для этой задачи вы можете создать
статический метод GetNumberOfObjects()
(и вам, очевидно, нужно статическое поле,
и некоторый код в конструкторе тоже). Зачем мне это статично, вы могли бы
просить. Ну, ответь на поставленный выше вопрос, и ты увидишь. Метод не
принадлежат к какому-то конкретному объекту. Кроме того, он не изменяет никаких объектов.
Надеюсь, это имеет смысл.