修饰符”static”对此项无效的静态接口错误C#


The modifier 'static' is not valid for this item / Static interface error in c#

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

我们如何在接口中实现静态方法…?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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"对此项无效


你做不到。应该是

1
2
3
4
5
6
7
8
9
10
11
   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);
    }

看看为什么不允许静态方法实现接口?

埃里克·利珀特还写了一个很酷的系列文章,叫做

  • 对类型参数调用静态方法是非法的,part onepart two

这是绝对正确的。不能在接口中指定静态成员。必须这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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文档注释——这会使它们更有用。我在成员之间添加了一些空白以使代码更容易阅读。您还应该考虑使接口成为通用的。)

你为什么一开始就试图让成员保持静止?你希望达到什么目标?


不,你不能…静态方法/变量引用的是类本身,而不是该类的实例,并且由于接口的目的是由类实现,因此在接口中不能有静态方法…这没道理