Consider the singleton pattern - you want to use one instance and one instance only:
public class MySingleton
{
protected static Lazy<MySingleton> _instance = new Lazy<MySingleton>(() => new MySingleton());
protected MySingleton() {}
public static MySingleton Instance
{
get { return _instance.Value; }
}
}
The way the class is constructed, you can only ever use the one instance, stored in the static variable. Consider the HttpContext.Current
static property.
In addition, static items are useful for state maintenance; say you want to cache some data in memory that any instance needs, but there is no need to refetch the data.
You also are required to make static classes for extension methods.