How do you turn an object orientated language like C# into a procedural language like COBOL? That’s right you make everything static. On a current project we have a business DLL with 39 code files and 412 instances of the static keyword. That’s +10 per code file. Here is the screen shot from Visual Studio 2010.
You might be asking “What’s wrong with this?” and if you like spaghetti the answer is nothing. Some people say that object orientated code is complicated because of the hiding of implementation in base class’s obscures what the program does, but I can also argue that seeing all of the implementation details in static classes obscures the forest because of the trees. Either way, too far to the left or right and you will have issues. A more moderate approach is swinging between the paradigms and choosing the correct design techniques.
Choosing between static and instance methods is a matter of object-oriented design. If the method you are writing is a behavior of an object, then it should be an instance method. If it doesn’t depend on an instance of an object, it should be static. Remember, testing static methods that have dependencies are notoriously difficult to isolate and Unit test.