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



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

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

是的,静态成员必须在接口上实现,但这并不是真正的"默认实现"。静态成员是接口的成员,而不是实现类的成员。所以你不能"推迟"实现类型的实现。在接口上拥有静态成员并不意味着实现人员必须拥有这个静态成员。

对于所有静态成员都是如此,而不仅仅是接口。静态成员不能被继承,也不能被重写。

换句话说,你不能做:

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()意味着什么?编译器如何知道要绑定到什么方法?

最新更新