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#实现安全删除文件目录的方法,涉及C#删除文件目录的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • 在C#里面给PPT文档添加注释的实现代码

    在C#里面给PPT文档添加注释的实现代码

    平常开会或者做总结报告的时候我们通常都会用到PowerPoint演示文稿,我们可以在单个幻灯片或者全部幻灯片里面添加注释,这样观众可以从注释内容里面获取更多的相关信息,需要的朋友可以参考下
    2017-01-01
  • C#窗体全屏功能实例代码

    C#窗体全屏功能实例代码

    简要介绍窗体全屏的方法,列出实现窗体的全屏功能以及全屏功能的快捷键的代码,需要的朋友可以参考下
    2016-11-11
  • c# 以类名为参创建父类相同的类的实例代码

    c# 以类名为参创建父类相同的类的实例代码

    下面小编就为大家带来一篇c# 以类名为参创建父类相同的类的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C#操作注册表的方法

    C#操作注册表的方法

    这篇文章主要介绍了C#操作注册表的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • C#9.0主要特性的一些想法

    C#9.0主要特性的一些想法

    这篇文章主要给大家介绍了关于C#9.0主要特性的一些想法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C#利用Openxml读取Excel数据实例

    C#利用Openxml读取Excel数据实例

    这篇文章主要介绍了C#利用Openxml读取Excel数据的方法,包括使用中的注意点分析及疑难探讨,需要的朋友可以参考下
    2014-09-09
  • C#实现多个计时器记录不同定时时间

    C#实现多个计时器记录不同定时时间

    这篇文章主要为大家详细介绍了C#实现多个计时器记录不同定时时间,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C#基于jwt实现分布式登录

    C#基于jwt实现分布式登录

    这篇文章主要介绍了C#基于jwt实现分布式登录的步骤,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • c#实现字符串反序输出字符串的实例

    c#实现字符串反序输出字符串的实例

    下面小编就为大家分享一篇c#实现字符串反序输出字符串的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12

最新评论