A class can be declared static, indicating that it contains only
static members. It is not possible to create instances of a static
class using the new keyword. Static classes are loaded automatically
by the .NET Framework common language runtime (CLR) when the program
or namespace containing the class is loaded.
Use a static class to contain methods that are not associated with a
particular object. For example, it is a common requirement to create a
set of methods that do not act on instance data and are not associated
to a specific object in your code. You could use a static class to
hold those methods.
The main features of a static class are:
They only contain static members.
They cannot be instantiated.
They are sealed.
They cannot contain Instance Constructors.
A static method, field, property, or event is callable on a class even
when no instance of the class has been created. If any instances of
the class are created, they cannot be used to access the static
member. Only one copy of static fields and events exists, and static
methods and properties can only access static fields and static
events. Static members are often used to represent data or
calculations that do not change in response to object state; for
instance, a math library might contain static methods for calculating
sine and cosine.
I might be stating this wrong, but if you have a static class, it's usually because everything in that class can be static, and there's never a reason to maintain an instance of it.
If you have static members of a non-static class, you still want to maintain state of that object (or at least carry an instance of it), but some methods that relate to it can be called without instantiating the class.