静态方法可以在.NET中实现接口

时间:2013-01-28 22:54:37

标签: c# .net inheritance

  

可能重复:
  Why Doesn’t C# Allow Static Methods to Implement an Interface?

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

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)
    { ....

我可以为此获得一个界面吗?

3 个答案:

答案 0 :(得分:3)

简答:否。

更长的回答:

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

元代码

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());