0

インターフェイスに静的メソッドを実装するにはどうすればよいですか...?

public interface ICache
{
  //Get item from cache
  static object Get(string pName);

  //Check an item exist in cache
  static bool Contains(string pName); 

  //Add an item to cache
  static void Add(string pName, object pValue);

  //Remove an item from cache
  static void Remove(string pName);
}

上記のインターフェイスはエラーをスローします:修飾子 'static' は、このアイテムに対して有効ではありません

4

3 に答える 3

4

そして、それは絶対に正しいです。インターフェイスで静的メンバーを指定することはできません。次のようにする必要があります。

public interface ICache
{
  //Get item from cache
  object Get(string pName);

  //Check an item exist in cache
  bool Contains(string pName);

  //Add an item to cache
  void Add(string pName, object pValue);

  //Remove an item from cache
  void Remove(string pName);
}

(ちなみに、コメントはXML ドキュメント コメントにする必要があります。これにより、はるかに便利になります。コードを読みやすくするために、メンバー間に空白を追加しました。インターフェイスを汎用にすることも検討する必要があります。)

そもそもなぜメンバーを静的にしようとしたのですか? 何を達成したかったのですか?

于 2013-04-19T10:13:17.303 に答える
4

あなたはそれをすることはできません。そのはず

   public interface ICache
    {
      //Get item from cache
      object Get(string pName);
      //Check an item exist in cache
      bool Contains(string pName);
      //Add an item to cache
      void Add(string pName, object pValue);
      //Remove an item from cache
      void Remove(string pName);
    }

C# で静的メソッドがインターフェイスを実装できない理由を確認してください。

また、 Eric Lippertは次のようなクールな記事シリーズを書きました。

  • 型パラメーターでの静的メソッドの呼び出しは違法です , part one,part two
于 2013-04-19T10:14:02.477 に答える
1

いいえ、できません...静的メソッド/変数は、そのクラスのインスタンスではなくクラス自体を参照します。インターフェイスの目的はクラスによって実装されるため、インターフェイスに静的メソッドを含めることはできません...そうではありません'意味がわからない

于 2013-04-19T10:14:59.233 に答える