静态方法无法实现接口方法,为什么?

xpo*_*ort 9 c#

interface IXXX
{
    void Foo();
}

class XXX : IXXX
{
    public static void Foo()
    {
        Console.WriteLine("From XXX");
    }
}


class Program 
{
    static void Main(string[] args)
    {
        XXX.Foo();

    }
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:XXX.Foo()无法实现接口成员,因为它是静态的.

为什么静态方法不能实现接口方法?

Øyv*_*hen 11

请参阅JoelOnSoftware的这个主题,描述其背后的原因.

基本上,接口是使用者和提供者之间的契约,静态方法属于该类,而不是类的每个实例.

关于SO的早期问题也涉及完全相同的问题: 为什么C#不允许静态方法实现接口?


Ric*_*ett 5

接口定义了对象必须响应的行为。由于 Foo 是一个静态方法,对象不会响应它。换句话说,你不能写......

XXX myXXX = new XXX();
myXXX.Foo();
Run Code Online (Sandbox Code Playgroud)

换句话说,myXXX 并不能完全满足接口的要求。