C# 类没有实现接口中的所有方法 为什么通过了编译

如题所述

抽象类撒

用 abstract 修饰的类是抽象类。   在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象。   凡是包含纯虚函数的类都是抽象类。   抽象类是不完整的,并且它只能用作基类。它与非抽象类的不同:   1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。   2、允许(但不要求)抽象类包含抽象成员。   3、抽象类不能被密封。   当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。在下边的示例中:   abstract class A{ public abstract void F();}   abstract class B: A{ public void G() {}}   class C: B{ public override void F() { // actual implementation of F }}    抽象类 A 引入抽象方法 F。类 B 引入另一个方法 G,但由于它不提供 F 的实现,B 也必须声明为抽象类。类 C 重写 F,并提供一个具体实现。由于 C 中没有了抽象成员,因此可以(但并非必须)将 C 声明为非抽象类。   抽象类与接口紧密相关。然接口又比抽象类更抽象,这主要体现在它们的差别上:1)类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。2)抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。3)抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。4)这一点也是最重要的一点本质的一点"抽象类是对象的抽象,然而接口是一种行为规范"。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-08
首先你必须要弄明白什么是接口。
接口可以包容方法、C#属性、事件、以及索引器与非抽象类很类似。
但是:
在接口使用的时候,空接口有2种情况
1:类似于ObjectBuilder中的IBuilderPolicy,他们往往是做一个标记,表示需要某个功能
2:你的接口继承了别的接口(非空),你的接口本身没有声明函数.

如上:接口可以是空的,没有任何的实现。。本回答被网友采纳
相似回答