接口中定义的所有静态成员都必须使用默认实现定义吗?

Do all static members defined in an interface have to be defined with default implementation?

我最近一直在玩接口中的静态成员。特别是对于静态方法。我注意到,每当我在接口中定义静态方法时,我都必须使用默认实现来定义它。否则会出现编译时错误CS0501。我想知道的是,是否必须使用默认实现定义接口中定义的所有静态成员?还是这仅适用于接口中定义的静态方法?

public interface IFoo
{
    public static void MethodFoo()
    {
       //implementation
    }
}

是的,我必须在接口上实现静态成员,但这并不是真正的“默认实现”。静态成员是 接口 的成员,而不是 实现 class 的成员。所以你不能将实现“推迟”到一个实现类型。在接口上有一个静态成员并不意味着“实现者必须有这个静态成员”。

这适用于所有静态成员,而不仅仅是接口。静态成员不被继承且不能被覆盖。

换句话说,你不能这样做:

interface IFoo{
   static virtual void Bar();
}

class Fizz : IFoo:
{
   static void Bar() {
      Console.WriteLine("In Fizz");
   }
}

Class Buzz : IFoo:
{
   static void Bar() {
      Console.WriteLine("In Buzz");
   }
}

如果可以,IFoo.Bar() 是什么意思?编译器如何知道要绑定到什么方法?