Suppose you could specify in an interface that a type had to have a particular static method… how would you call it? Polymorphism works through instances – whereas static members explicitly don’t use instances.
Now, having said that, there’s one situation in which I can see static interface members working: generic types. For example:
// This isn't valid code...
public void Foo<T>() where T : ICodeGenerator
{
string type = T.GetDbConnectionType();
}
That would call the static member on the concrete type T
.
I’ve blogged more about this, but I suspect the benefit doesn’t justify the complexity.
In terms of alternatives – usually you’d have another interface, and have separate types to implement that interface. That works well in some contexts, but not in others.