【原创】C#中的抽象类(abstract class)和接口(interface)的比较

在C#中抽象类和接口是两个相当重要的概念,深入理解对C#程序员是非常必要的,现总结如下:

一、抽象类的特点:

1、抽象方法只用于方法的声明并不包含方法的实现,可以看作没有实现实体的虚方法。

2、抽象类不能进行实例化。

3、抽象类里面可以不包含抽象属性和抽象方法,但如果包含抽象方法,则该类必须声明为抽象类。

4、具体的派生类必须覆盖基类的抽象方法。

5、抽象类也可以派生另一个抽象类,其中可以覆盖基类的抽象方法也可以不用覆盖,但是不覆盖的话,

则其派生类比较覆盖它们。

二、接口(interface)的特点

1、接口也不能进行实例化。

2、接口只能包含类的声明。

3、成员可以包含属性、方法、事件和索引器。

4、接口中不能包含常量、字段、构造函数、析构函数或静态成员。

5、接口 中所有的成员都默认用public修饰符进行修饰,不能出现private修饰符。

6、派生类比较实现接口所有的成员。

7、一个可以继承多个接口,接口之间用 , 分割。

8、一个接口可以有多个父接口,实现该接口的类必须实现所有父接口中的所有成员。

三、抽象类和接口的相同之处

1、都不能被实例化。

2、都可以被继承。

3、都可以包含方法声明。

4、派生类必须实现抽象类(接口)中未实现的方法。

四、抽象类和接口的不同之处

1、抽象类是一个不完整的类,需要进一步细化;接口只是一个行为的规范或规定。

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

3、抽象类更多的是定义在一系列关系紧密的类之间;接口大多定义在关系稀松但都实现某一功能的操作。

4、接口不具有继承的任何特点。

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

6、接口支持回调,抽象类不可以。

7、抽象类不能密封。

8、抽象类实现的具体方法默认为虚的;但实现接口的类中的接口方法默认不是虚的,当然也可手动声明为虚的。

9、接口和非抽象类类似,抽象类必须为在该类的基类列表中列出的接口的所有成员提供他自己的实现。但是允许抽象类将接口的方法隐射到抽象方法上。

10、如果抽象类实现接口,则可以把接口中的方法映射到抽象类中作为抽象方法而不必实现,而是在抽象类的子类中实现接口中的方法。

我的最新公众号欢迎关注一下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、继承和多态在面向对象编程中,继承(也称为派生)让您能够创建新类,而这些类继承了父类(也称为基类)的特征和行为。...
    CarlDonitz阅读 860评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 一、抽象类 1、抽象类含义的概括: 当多个类出现相同功能时,但功能主体不同,这样可以向上抽取,抽取时只抽取功能定义...
    玉圣阅读 848评论 0 6
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,540评论 1 51
  • 人有时候对着陌生人会把最真实的事件最真实的想法都说出来,那个午后她和我说了一个关于她的人生。 对于一个自认为命苦的...
    饶瞳阅读 250评论 0 0