C#接口中为什么不能像java那样使用static?

我印象中java里面的接口使用static final修饰的常量,不是成员方法,使用static修饰的method放在接口中是无意义的,接口是用来抽象的。。。。
与Java不同,C#中的接口不能包含域(Field)。另外还要注意,在C#中,显式为接口的方法指定public修饰符是非法的。
综上,所以c#接口中不允许使用static~~因为他的接口中没有field这个概念,与java不同,而java中使用static的也正是field,而不是method!

接口不实现方法,static是静态调用,调用不实现的方法,有意义吗?
接口里的方法是通过接口映射表来调用实现的(vmt),用virtual没有意义..
接口里不实现方法,自然override重写就没意义了..
接口是全部抽象的,既然全都是抽象,就没必要用abstract标明了.

接口里的方法是通过调用拥有此接口的类来调用的(或显示地调用接口的某方法).在此类的声明中,必须有定义此接口的此方法实现.再来看下static:静态字段、静态属性可以在类的实例之间共享(也就是任何类的某对象可以直接使用静态字段,注意是对象在使用静态字段、属性)。而静态方法的使用只需此类名调用即可(不是用此类的对象去调用,即,不能声明此类的一个对象去调用静态方法,它与对象无关),另外,静态方法必须是个有具体代码的方法,不能是空方法.因为任何一个编译器在编译时都必须非常清楚地知道此方法是要如何地被执行.static是让成员在其对象上进行共享的,而abstract一定是要让其继承,让其重载,让其有另一套,故不能用static修饰接口里的成员变量.

字段、方法、属性用static声明,表示它们是类的静态成员,而不是对象实例的成员。

这样看来,因为接口本身就是abstract,一定是abstract的.故,它的所有成员都一定是abstract,不需要用abstract去显示地声明成员,若显示地声明了,也没大错,只是没有意义而已(因为大家都知道你一定就是abstract,不需要叫你名字的时候再特意重声下abstract,没意义).因为接口的所有成员一定是abstract,故接口的所有方法不能有任何实现代码(即一定要被调用它的类在定义时重载,故不用virtual修改方法,同上面不需要用abstract修改一样的道理).所以,接口的所有方法在声明时,不需要使用virtul,override关键字来修饰.

参考资料: http://blog.csdn.net/chinmusam/archive/2010/04/18/5499445.aspx

猜你喜欢

转载自blog.csdn.net/u011555996/article/details/85324590