修饰符“modifier”对该项无效:
类或接口成员是用无效的访问修饰符标记的。 下列示例描述了一些无效的修饰符:
在显式接口声明上不允许使用 public 关键字。 在这种情况下,请从显式接口声明中移除 public 关键字。
在显式接口声明上不允许使用 abstract 关键字,因为显式接口实现永远不能被重写。
在以前的 Visual Studio 版本中,不允许在类上使用 static 修饰符,但允许 static 类以 Microsoft Visual Studio 2005 开头。
现在说说自己的理解:
(1)接口是要被继承的,它没有方法,属性,事件,索引器的实现,所以不能实例化,因此不能static。
(2)接口成员是自动public的,因此不能在接口的声明上添加任何访问修饰符,包括public修饰符
(3)显式接口的实现的时候,因为已经指明接口是显式的,所以在指明public就是多余的
(4)至于为什么不能用abstract,virtual关键字?VS中讲:
接口如果被基类继承实现,再被派生类继承基类,那么派生类被认为是隐式的实现接口,这个是为什么在派生类中不可以对接口重写的原因。所以我们就当这个是接口的特性吧,接口只能被实现一次,不能被重写,因此当指定了显示的接口,那就必须得去实现该接口,也不能再去重写了。
示例:
namespace ConsoleApplication10Inter { interface Inter1 { void func(); //public int getIndex(string str); int add(int x, int y); int sub(int x, int y); } abstract class Class1:Inter1 { //void func() { } //error,接口成员的实现方法必须是public的 public virtual void func() { } public abstract int add(int x,int y); //abstract int Inter1.sub(int x,int y);//error,显示接口不能被声明为abstract //virtual int Inter1.sub() { return 0; }//error public int sub(int x,int y) { return 0; } } }
原文:http://blog.csdn.net/ddupd/article/details/21877749