日期:2014-05-17  浏览次数:21267 次

写了个很简单的interface却有两个编译错误,非常不解:

namespace Learncs
{
    interface B
    {
        public virtual void f();
    }
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

编译有两个错误:
error CS0106: The modifier 'public' is not valid for this item
error CS0106: The modifier 'virtual' is not valid for this item

这是什么情况呢?

------解决方案--------------------
接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定除public外的任何访问修饰符,否则 编译器会报错。
接口成员不能有static、abstract、override、virtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new。

------解决方案--------------------
interface B
{
  void f();
}

------解决方案--------------------
引用:
Quote: 引用:

接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定除public外的任何访问修饰符,否则 编译器会报错。
接口成员不能有static、abstract、override、virtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new。


可是我就是public啊,我去掉了void也不行。

    interface B
    {
        public void f();
    }

还是报错:
error CS0106: The modifier 'public' is not valid for this item


引用:
Quote: 引用:

接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定除public外的任何访问修饰符,否则 编译器会报错。
接口成员不能有static、abstract、override、virtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new。


可是我就是public啊,我去掉了void也不行。

    interface B
    {
        public void f();
    }

还是报错:
error CS0106: The modifier 'public' is not valid for this item


去掉的应该是public,不是void。
------解决方案--------------------
引用:
Quote: 引用:

interface B
{
  void f();
}