(C #) По умолчанию я использую статические методы в статических классах и нестатические методы в нестатических классах.
Когда я разрабатываю класс, я нахожу себя естественным образом сходящимся на том, чтобы сделать его полностью статичным или полностью нестатичным. Практически говоря, если я захочу определить статические члены внутри нестатического класса, я часто обнаруживаю, что в конечном итоге будет разумнее разбить их на отдельный статический класс - либо служебный класс, такой как Math, либо глобальное приложение класс (например, .NET ConfigurationManager).
С объектно-ориентированной точки зрения метод делает что-то с / с объектом. Поэтому, если вы используете экземпляр объекта, для меня имеет смысл думать о методах этого объекта как нестатических. Технически вы можете сделать так, чтобы нестатический класс имел статические члены, если им не требуется доступ к экземпляру. Но якобы, по крайней мере, методы класса все равно будут делать что-то с этим классом, поэтому я все равно сделаю их нестатичными. При прочих равных условиях.