What is so bad about static classes?
Someone asked me “what is so bad about static classes” during the “O” in my SOLID presentation http://solid.architecture.michaelkappel.com/Principles/OCP/. My response was that can not inherited from so that makes their members closed to extension. (Actually I stumbled a little said something else but that is what I meant.)
Static classes in general preclude the use of dependency injection. Dependency injection is crucial to being able use Mock objects necessary to isolate functionality in order to do proper unit testing. Static classes calling static classes make code to tightly coupled. Tightly coupled code is more likely to require changes because it has direct dependencies. Those dependencies increase the likelihood that when a static method is modified it may cause unexpected behavior in another static. It is always true when you are not closed for modification you are likely to introduce new bugs but it seems to be amplified when static methods call other static methods because it can cascade change.
Using static classes in general increases the probability of the introduction of new bugs and makes fixing them harder because you can not isolate functionality.
Static and Extension Methods do serve to decrease the complexity of code so I guess it is all about using them at the correct time for the right reason but in general is incompatible with the SOLID software approach.