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

 更新时间:2014年10月22日 08:58:26   投稿:shichen2014  
这篇文章主要介绍了C#抽象类和接口的区别,详细的分析了抽象类与接口的概念与特性,并对二者作出比对说明,需要的朋友可以参考下

很多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#异步任务延续的三种底原理解析(最新推荐)

    C#异步任务延续的三种底原理解析(最新推荐)

    这篇文章主要介绍了C#异步 任务延续的三种底层玩法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05
  • C# datagrid非常规方法实现添加合并列

    C# datagrid非常规方法实现添加合并列

    这篇文章主要介绍了C# datagrid非常规方法实现添加合并列,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • C#实现实时监控文件夹变化

    C#实现实时监控文件夹变化

    在开发各种应用程序时,我们经常需要对文件系统中的文件或文件夹进行实时监测,下面就跟随小编一起来看看具体如何使用C#实现这一功能吧
    2024-03-03
  • Unity键盘WASD实现物体移动

    Unity键盘WASD实现物体移动

    这篇文章主要为大家详细介绍了Unity键盘WASD实现物体移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#中实现线程同步lock关键字的用法详解

    C#中实现线程同步lock关键字的用法详解

    实现线程同步的第一种方式是我们经常使用的lock关键字,它将包围的语句块标记为临界区,这样一次只有一个线程进入临界区并执行代码,接下来通过本文给大家介绍C#中实现线程同步lock关键字的用法详解,一起看看吧
    2016-07-07
  • 深入理解C#窗体关闭事件

    深入理解C#窗体关闭事件

    很多初学者都想把默认的C#关闭按钮事件弄明白,本文就介绍一下C#窗体关闭事件,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • vs2019 实现C#调用c++的dll两种方法

    vs2019 实现C#调用c++的dll两种方法

    这篇文章主要介绍了vs2019 实现C#调用c++的dll两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • C#线程倒计时器源码分享

    C#线程倒计时器源码分享

    这篇文章主要为大家分享了C#线程倒计时器源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C#通过yield实现数组全排列的方法

    C#通过yield实现数组全排列的方法

    这篇文章主要介绍了C#通过yield实现数组全排列的方法,以实例形式较为详细的分析了全排列的概念及C#的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Unity使用LineRender实现签名效果

    Unity使用LineRender实现签名效果

    这篇文章主要为大家详细介绍了Unity使用LineRender实现签名效果,制作签名功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10

最新评论