关于C#:静态方法能否在.NET中实现接口

Can static methods implement an interface in .NET

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why Doesn’t C# Allow Static Methods to Implement an Interface?

我有这样的代码,它说我不能实现静态方法:

1
2
3
4
5
6
7
8
public static class AuxiliaryHelper : IAuxiliaryHelper
{
    /// <summary>
    /// Writes the response.
    /// </summary>
    /// <param name="jsonObj">The json object that gets turned in JSON and written out.</param>
    public static void WriteResponse(this object jsonObj)
    { ....

能给我一个接口吗?


简短回答:不。

更长的答案:

这个概念没有任何意义。接口的要点是定义描述各种实现的契约的基类型。我可以使用IFoo的静态类型声明变量,它告诉编译器我不知道在运行时这是什么类型,但我向您保证它将有一组特定的方法。-因此,编译器将允许您调用这些方法,这些方法将在运行时解析。

静态方法总是绑定到一个且只有一个类,因此没有可引用的实例。


不,接口不能有静态方法。实现接口的类需要将它们全部实现为实例方法。静态类不能有实例方法。


我注意到,你使用了一种扩展方法。也许这种变化可以帮助你。

元代码

1
2
3
4
5
6
7
8
9
10
11
12
13
public static class HelperExtensions
{
    //Note the interface goes here
    public static void WriteResponse(this IAuxiliaryHelper helper,
                                     object jsonObj)
    {
        //omn nom nom
    }
}

//somewhere else - usage
IAuxiliaryHelper h = new Foo();
h.WriteResponse(new JsonObject());