1

重複の可能性:
C# で静的メソッドがインターフェイスを実装できないのはなぜですか?

静的メソッドを実装できないという次のようなコードがあります。

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

このためのインターフェイスを取得できますか?

4

3 に答える 3

3

簡単な答え:いいえ。

より長い答え:

この概念は本当に意味がありません。インターフェイスのポイントは、さまざまな実装のコントラクトを記述する基本型を定義することです。の静的型を使用して変数を宣言できます。これにより、実行時にこれがどの型になるかわからないことをIFooコンパイラーに伝えますが、特定のメソッドのセットがあることを保証します。- したがって、コンパイラはこれらのメソッドを呼び出すことができ、実行時に解決されます。

静的メソッドは常に1つのクラスだけにバインドされるため、参照するインスタンスはありません。

于 2013-01-28T23:00:14.313 に答える
2

いいえ、インターフェイスに静的メソッドを含めることはできません。インターフェイスを実装するクラスは、それらすべてをインスタンス メソッドとして実装する必要があります。静的クラスはインスタンス メソッドを持つことができません。

于 2013-01-28T22:58:16.830 に答える
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());
于 2013-01-28T23:15:49.213 に答える