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. 接口可以用于支持回调,而继承并不具备这个特点。
  6. 如果抽象类中实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口方法

目标

选择

创建多个组件版本

抽象类

设计小而简练的功能块

接口

设计大型功能单元

抽象类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值