You can define a class as static if you want to guarantee that it can't be instantiated, can't derive from or serve as the base for another type, and can contain only static members.
http://msdn.microsoft.com/en-us/library/vstudio/79b3xss3.aspx
Having extension methods being edit: static new'd in child classes and such would be a real pain.
As is the case with all class types, the type information for a static class is loaded by the .NET Framework common language runtime (CLR) when the program that references the class is loaded.
Static classes are higher on the initialization priority chain, making the implementation a bit more efficient.