接口中定义的所有静态成员都必须使用默认实现定义吗?
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()
是什么意思?编译器如何知道要绑定到什么方法?
我最近一直在玩接口中的静态成员。特别是对于静态方法。我注意到,每当我在接口中定义静态方法时,我都必须使用默认实现来定义它。否则会出现编译时错误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()
是什么意思?编译器如何知道要绑定到什么方法?