首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2014-01-15 
写了个很简单的interface却有两个编译错误,非常不解:namespace Learncs{interface B{public virtual void

写了个很简单的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();
}


那么这个void默认的访问级别是public还是internal?


interface 不分级别。
在实现时再给。
[解决办法]
一个人问一个很低级很荒谬的问题很常见,但是像你这样每个问题问得都莫名其妙的也真奇葩了。

你说定义接口声明个public有什么意义?难道还能是private的么?
[解决办法]


   namespace Learncs
   {
       interface B
       {
           void f();//这样改就行了,接口是不能用public与virtual的,这是语法的规定
       }
       class Program
       {
           static void Main(string[] args)
           {
           }
       }
   }

[解决办法]
public问题:

Interfaces can contain methods, properties, events, indexers, or any combination of those four member types. For links to examples, see Related Sections. An interface can't contain constants, fields, operators, instance constructors, destructors, or types. Interface members are automatically public, and they can't include any access modifiers. Members also can't be static.

来自:
Interfaces (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/ms173156.aspx
[解决办法]
看这问题其实挺有意思的。比如说virtual,接口的方法就是要来实现的,定义一个virtual方法意思不就是可有可无了?接口的方法是在实现它的时候才有方法体,方法才有具体意义,这时候才有访问分级,没实现接口又没法调用接口的方法,定义public、private啥的都没意义阿。

热点排行