C#抽象类和接口的区别分析

作者:shichen2014 时间:2023-11-09 13:56:21 

很多C#的初学者在编程时都容易把抽象类和接口搞混,本文就为大家从概念上讲解抽象类和接口的区别:

一、抽象类:

含有abstract修饰符的class即为抽象类,抽象类是特殊的类,只是不能被实例化,可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖。

二、接口:

接口是引用类型的,类似于类,和抽象类的相似之处有三点:
1、不能实例化;
2、包含未实现的方法声明;
3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

接口有如下特性:

接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 

两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

7. 一个类可以实现多个接口,但只能继承一个抽象类。

8.接口可以用于支持回调,而继承并不具备这个特点.    9.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的. 

抽象类和接口的使用:

1.如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。
4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
5.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

希望本文所述对大家的C#程序设计有所帮助。

标签:C#,抽象类,接口,区别
0
投稿

猜你喜欢

  • Unity使用LineRender断笔写字

    2023-01-07 09:29:38
  • SpringBoot使用Maven插件进行项目打包的方法

    2022-12-21 21:07:34
  • java GUI实现学生图书管理简单实例

    2023-11-11 05:00:05
  • Android webview如何加载HTML,CSS等语言的示例

    2022-09-20 23:06:18
  • Spring Boot实现分布式锁的自动释放的示例代码

    2023-10-17 11:06:24
  • java开源调度如何给xxljob加k8s执行器

    2021-09-17 16:41:50
  • Java如何获取word文档的条目化内容

    2023-10-27 15:04:32
  • Java的JDBC中Statement与CallableStatement对象实例

    2022-11-14 17:22:08
  • Android中实现图文并茂的按钮实例代码

    2022-10-18 22:58:49
  • Java使用组合模式实现表示公司组织结构功能示例

    2022-07-31 08:03:37
  • Java中joda日期格式化工具的使用示例

    2023-03-01 11:49:10
  • 面试官:Java中new Object()到底占用几个字节

    2022-02-09 19:04:00
  • Java8 Comparator: 列表排序的深入讲解

    2022-12-11 08:30:01
  • C#中派生类调用基类构造函数用法分析

    2022-01-14 08:10:22
  • C#微信开发第一章

    2022-02-14 19:16:31
  • Java web项目中的强制登录功能实现代码

    2023-09-14 08:26:18
  • C# IQueryable及IEnumerable区别解析

    2021-11-27 13:46:36
  • 详解Java中restTemplate的使用

    2023-06-19 23:20:29
  • C# Winform多屏幕多显示器编程技巧实例

    2021-09-19 16:49:09
  • Java上传文件图片到服务器的方法

    2022-12-06 01:40:46
  • asp之家 软件编程 m.aspxhome.com