c#中抽象类(abstract)和接口(interface)的异同

c#中抽象类(abstract)和接口(interface)异同

抽象类:

1.抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法
2.抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类
3.具体派生类必须覆盖基类的抽象方法
4.抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。
5.抽象类不能被实例化
接口:
1.接口不能被实例化
  2.接口只能包含方法声明
  3.接口的成员包括方法、属性、索引器、事件
  4.接口中不能包含常量、字段()、构造函数、析构函数、静态成员。
  5.接口中的所有成员默认为public,因此接口中不能有private修饰符
  6.派生类必须实现接口的所有成员
  7.一个类可以直接实现多个接口,接口之间用逗号隔开
  8.一个接口可以有多个父接口,实现该接口的类必须实现所有父接口中的所有成员。

相同点:

  1. 都可以被继承
  2. 都不能被实例化
  3. 都可以包含方法声明
  4. 、派生类必须实现未实现的方法

区别:

  1.  抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。

      2、接口可以被多重实现,抽象类只能被单一继承

  3、抽象类是一个不完整的类,需要进一步实现(继承,并实现方法)。接口是一个行为规范,可以直接继承引用
  4、接口基本不具备继承的特性,仅仅能够调用而已。
  5、接口可以用于支持回调,而继承并不具备这个特点。
  1. 如果抽象类中实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口方法
目标
选择
创建多个组件版本
抽象类
设计小而简练的功能块
接口
设计大型功能单元
抽象类
 
 
 
 

猜你喜欢

转载自blog.csdn.net/hemingyang97/article/details/81415124