Ну, я не могу окончательно сказать, что один лучше, потому что они служат различным целям.
Вы знакомы с ООП? В ООП статические объекты или члены класса, к которым можно получить доступ непосредственно из класса, в то время как нестатические члены могут быть доступны только из экземпляра, которому он принадлежит.
C # следует аналогичным принципам для методов. К статическим методам можно обращаться напрямую из класса, в то время как к нестатическим методам (или методам экземпляра, как я их называю) нужно обращаться из экземпляра. Вот почему инстинктивность необходимо выполнять, например, для методов, в то время как для статических методов она просто не нужна и, кроме того, нецелесообразна (см. Ниже).
В ООП статические переменные используются для значений, которые не могут быть сохранены переменной экземпляра. Пример: предполагается, что вы хотите вести подсчет, сколько существует экземпляров класса? Как бы вы хранили это в одном экземпляре?
Методы используют аналогичный принцип. Они должны использоваться для процедур, для которых нецелесообразно делать в экземпляре класса. Я склонен использовать их для широких процедур (не технических терминов), то есть тех, которые не требуют от меня создания экземпляра объекта. Пример добавления двух параметров. (Это использование может или не может быть правильным, но я считаю, что это так)
Однако, если вы хотите добавить два свойства объекта, метод не может быть статическим, потому что, как вы скоро поймете, статические методы не могут получить доступ к методам экземпляра или переменным внутри класса. Конечно, это имеет смысл, потому что этот статический метод не будет знать, из какого экземпляра класса он получит их, если ему не будет сказано, поскольку он не является частью самого экземпляра)
Ради дальнейших осложнений я остановлюсь здесь. Дайте мне знать, если вы что-то не так поняли.