Understanding the lack of static method in Interface in C#

In C# there is no way to define a sta­t­ic method in an inter­face:

interface IMyClass
{
    void MyMethod();  // this is fine
    static int MyStaticMethod();  // not allowed..
    static int MyOtherStaticMethod() { return 1; } // not allowed either
}

This lack of sta­t­ic method can be painful at times, and on the sur­face one feels there is no rea­son why it can’t/shouldn’t be sup­port­ed by the lan­guage. But after plough­ing through forum dis­cus­sions and numer­ous ques­tions on Stack­Over­flow I start to under­stand why this is the case.

Prac­ti­cal­ly, this is why hav­ing sta­t­ic method on the inter­face is con­fus­ing:

interface IMyClass
{
    static int MyStaticMethod();
}

class MyClassA : IMyClass
{
    static int MyStaticMethod() { return 1; }
}

class MyClassB : IMyClass
{
    static int MyStaticMethod() { return 2; }
}

So what does IMyClass.MyStaticMethod return?

Philo­soph­i­cal­ly, an Inter­face defines a con­tract, when deal­ing with an inter­face you don’t have to know the imple­men­ta­tion details but only what is avail­able on the inter­face. Sta­t­ic method on the hand, are designed so that you have a well known loca­tion for a method/property and don’t need an instance of the object to work with it.

These two con­cepts are polar oppo­sites, and you can’t mix the two togeth­er with­out break­ing poly­mor­phism!