一直对这两个基础概念没有很好的认识,在网上发现一个我能够理解的基础概念理解,存一下,反复看。

C#中抽象类和接口的区别与应用场景一、
1.抽象类:抽象类是特殊的类,只是不能被实例化;和普通类一样里面什么都有,比普通类多了一个抽象方法成员;抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们.
1.1、不能对字段抽象(因为字段只能用等号赋值没其他代码〈不同于属性),没啥抽象的意义);
1.2、不能对private抽象;
1.3、可以含有非抽象的成员;
1.4、不能实例化;
1.5、只能从一个类继承;
1.6、可以被抽象类继承,此时不必实现抽象成员;
1.7、可以被普通类继承,此时必须实现抽象成员;
1.8、实现抽象成员时要加overrride;
1.9、可对类用abstract,不对其方法用abstract;
1.10、但若对方法用abstract,其类必须用abstract;
1.11、若类用了abstract,方法没用abstract,不表示方法也是abstract;
1.12、不能使用new来实例化抽象类;
1.13、抽象方法不能有主体,只需要在参数写完后,直接收括号,引号结束;
1.14、抽象的方法是隐式的virtual方法所以它还有覆盖(改写、重写)的特点;二、
接口:可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函数,而且也不能包含任何静态成员1、不能对字段接口(因为字段只能用等号赋值,没其他代码(不同于属性),没啥接口的意义);
2、接口只能是public的.且不能使用public 关键字;
3、除了接口成员,不能有其他任何实现代码;
4、不能实例化;
5、可以从多个接口继承;
6、可以被接继承;此时不必也无法实现接口成员;.可以被抽象类继承,此时必须实现接口成员;
7、可以被普通类继承,此时必须实现接口成员;实现接口不能加override,必须加public.二、接口是引用类型的,类似于类,和抽象类的相似之处有三点:
1、不能实例化;
2、包含未实现的方法声明;
3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);三、抽象类和接口的区别:
1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定、微软的自定义接口总是后带able字段,证明其是表述一类类“我能做...”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中.
⒉.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;
3.—个类一次可以实现若干个接口,但是只能扩展一个父类
4.接口可以用于支持回调,而继承并不具备这个特点.
5.抽象类不能被密封.
6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的.
7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现.但是,允许抽象类将接口方法映射到抽象方法上.
8.抽象类实现了oop中的一个原则,把可变的与不可变的分离.抽象类和接口就是定义为不可变的,而把可变的座位子类去实现.
9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染.如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染.
10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合.因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!后果可想而知.(结合堆栈原理理解).同时,有心的朋友可以留意到微软在构建一个类时,很多时候用到了对象组合的方法.比如 asp.net中,Page类,有Server Request等属性,但其实他们都是某个类的对象.使用Page类的这个对象来调用另外的类的方法和属性,这个是非常基本的一个设计原则.
11.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法.四、抽象类和接口的使用:
1.如果预计要创建组件的多个版本,则创建抽象类.抽象类提供简单的方法来控制组件版本.
⒉.如果创建的功能将在大范围的全异对象间使用,则使用接口.如果要设计小而简练的功能块,则使用接口.
3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类.
4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能.
比喻:
1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类.
⒉就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现).门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染)).
3.狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫.很明显,前者相当于所说的是抽象类,而后者指的就是接口.
总的来说,接口和抽象类是.Net为了更好的实现类型之间继承关系而提供的语言手段,而且两者有些相辅相成的关系.因此我并不强调用什么而不用什么,那么问题的关键在于,如何把这两种手段合理的应用到程序当中,这才是至关重要.

C#中抽象类和接口的区别与应用场景相关推荐

  1. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...

  2. JDK8 中抽象类和接口的区别

    英文原文:https://www.javacodegeeks.com/2014/04/abstract-class-versus-interface-in-the-jdk-8-era.html jdk ...

  3. C#中抽象类和接口的区别

    一.抽象类:       抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆 ...

  4. C#中抽象类和接口的区别与使用

    一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外 ...

  5. java 抽象类与接口区别是什么_JAVA中抽象类与接口的区别,分别在什么情况下使用它们...

    在网上看到很多人问关于"抽象类与接口的区别",因此本人想通过自己多年对JAVA开发的经验来总结一下抽象类与接口的区别以及分别在什么情况下使用它们. 在Java语言中, abstra ...

  6. Java中抽象类和接口的区别?

    抽象类和接口的概念 抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以 ...

  7. 详细解答Java中抽象类和接口的区别问题!

    接口(Interface)和抽象类(Abstract Class)是支持抽象类定义的两种机制. 一.抽象类 在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称 ...

  8. 详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

  9. 【转】详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

最新文章

  1. ROS_Kinetic ubuntu 16.04
  2. 第十五届全国大学生智能汽车竞赛人工智能创意赛(预赛)
  3. zigbee cc2530地址空间 layout 和flash操作
  4. [转载]PSCAD调用MATLAB/SIMULINK之接口元件设计
  5. 软件工程心理学之9----乙方如何面对甲方2
  6. JS module的导出和导入
  7. python数字排序 循环_【python-leetcode448-循环排序】找到所有数组中消失的数字
  8. easyexcel安全扫描报php,easyExcel使用以及踩过的坑
  9. 凭什么,Netty能成为最流行的NIO框架?
  10. mysql数据库学习——5,数据类型,字符集和校对
  11. 生成.properties文件(bat文件生成)
  12. PyPI可以使用的几个国内源
  13. 计算机网络——数据链路层
  14. entsel约束条件lisp_autocad-plugin
  15. dompdf中文乱码、换行解决方案
  16. 几款电纸书阅读器参数对比
  17. MacOs12Macbookpro读写NTFS
  18. Latex排版学习笔记(1)——希腊字母表及其在latex中的表示
  19. WAF绕过-漏洞发现之代理池指纹被动探针
  20. 图片的分辨率大于设备分辨率或者小于设备的分辨率的显示问题

热门文章

  1. Python二叉树详解笔记
  2. java8 合并两个list日期相同为一条
  3. 思科交换机使用TFTP工具备份配置和上传配置
  4. 程序员课外拓展013:桌面云涉及到的概念
  5. 同样是技术出身,深夜看完张一鸣200条微博,让我越想越后怕
  6. Oracle trace level
  7. MySQL数据库编程--函数
  8. Job-shop和Flow-shop区别
  9. 学分绩点计算器java_东南大学 学分绩点gpa 计算器 【源码】
  10. 即第1个字母变成第26个字母,第i个字母变成第26-i+1个字母,非字母字符不变。要求编程序将密码变回原文,并输出密码和原文