C#抽象类与接口的比较


相同点
●都不能被直接实例化,都可以通过继承实现其抽象方法。
●都是面向抽象编程的技术基础,实现了诸多的设计模式。
不同点
●接口支持多继承;抽象类不能实现多继承。
●接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。
●接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。
●接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。
●接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。  
●接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
   通过相同与不同的比较,我们只能说接口和抽象类,各有所长,但无优略。在实际的编程实践中,我们要视具体情况来酌情量才,但是以下的经验和积累,或许能给大家一些启示,除了我的一些积累之外,很多都来源于经典,我相信经得起考验。所以在规则与场合中,我们学习这些经典,最重要的是学以致用,当然我将以一家之言博大家之笑,看官请继续。
规则与场合
1.请记住,面向对象思想的一个最重要的原则就是:面向接口编程。 软件开发网 www.mscto.com
2.借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,我认为其精髓简单说来就是:面向抽象编程。
3.抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
4.接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系;
5.接口多定义对象的行为;抽象类多定义对象的属性;  
6.接口定义可以使用public、protected、internal 和private修饰符,但是几乎所有的接口都定义为public,原因就不必多说了。
7.“接口不变”,是应该考虑的重要因素。所以,在由接口增加扩展时,应该增加新的接口,而不能更改现有接口。
8.尽量将接口设计成功能单一的功能块,以.NET Framework为例,IDisposable、IDisposable、IComparable、IEquatable、IEnumerable等都只包含一个公共方法。
9.接口名称前面的大写字母“I”是一个约定,正如字段名以下划线开头一样,请坚持这些原则。
10.在接口中,所有的方法都默认为public。  
11.如果预计会出现版本问题,可以创建“抽象类”。例如,创建了狗(Dog)、鸡(Chicken)和鸭(Duck),那么应该考虑抽象出动物(Animal)来应对以后可能出现风马牛的事情。而向接口中添加新成员则会强制要求修改所有派生类,并重新编译,所以版本式的问题最好以抽象类来实现。
12.从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
13.对抽象类不能使用new关键字,也不能被密封,原因是抽象类不能被实例化。
14.在抽象方法声明中不能使用 static 或 virtual 修饰符。

转载于:https://www.cnblogs.com/and/archive/2008/11/16/1334440.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建 Spring容器的三种方式

一、src路径下打包完在war包的classes层级下 1、Spring容器创建的三种方式 创建Bean容器之后创建对象: 其中第三种使用的是BeanFactory对象 2、spring通过配置文件用容器创建对象的原理 转载于:https://www.cnblogs.com/wmqiang/p/11537638.html

OpenSSL以及私有CA的搭建

首先我们肯定会问什么是OpneSSL,以及OpenSSL有什么用?当让这不仅是刚接触Linux的我想知道,相信大多数人和我一样也非常想知道,因为OpenSSL是linux上基础的服务之一,了解它的应用可以帮助我们更好的了解linux。那么我们先了解下什么…

重新修复安装.netframework2.0

有时候由于各种原因,导致.net组件失效,不防试试修复一下: CMD里运行: C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -u C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i转载于:https://www.cnblogs.com/comcy…

电话骗术升级了,提高警惕! (转自公司内部新闻组,真人真事)

事情经过: 今天早上家里的座机接到10000号打来的欠费电话,电脑语音提示欠费2600多元,然后我就很惊讶,挂断后就打10000号查询(手动拨号,并不是回拨的).一切都跟平常打10000号一样的语音提示,一步步操作,最后转到人工台,查询结果是欠费2600多,我说不可能,平常打电话都是用手机居多…

yii使用寻呼功能

CDbCriteria这是类包使用,包是yii自带专门用来处理类似分类这种功能的。而我们使用yii框架然后调用这种方法会起到事半功倍的效果,会发现使用这个可以节省非常多的时间。让你高速的使用PHP中分页的功能。 还要使用的一个类包就是CPagination,…

VTK:一个面向对象的可视化类库(zz)

VTK:一个面向对象的可视化类库(zz) (高隽 黄伟 合肥工业大学计算机与信息学院 合肥 230009) 摘要 Visualization Toolkit 是一个面向对象的可视化类库,它为从事可视化应用程序开发的广大科研工作者提供直接的技术支持。VTK…

装配Bean的三种方式

一、装配Bean就是在xml写一个Bean标签;装配完Bean,还需要读取xml配置文件创建Spring容器来创建对象; 1、new 实现类方式 正常的三种创建Bean容器的方法都可以根据装配的Bean创建的Bean对象; 2、静态工厂模式方式 其中,静态工厂方式…

通用权限管理系统组件 (GPM - General Permissions Manager) 权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱...

权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱 Ψ吉日嘎拉 采用通用权限管理系统,这些烦恼就少了很多了,很固定,很稳定。 权限管理系统是否支持按组织…

Mahout 介绍

1.Hbasek-means (G级别) 2.k-meansmr (T级别)1. 2.canopy 2.贝叶斯算法 决策,分类,文档分类3.推荐系统 4.图书推荐系统 1.需求 付完款的用户90%都要回到购物车看看自己买的东西是否少买/多买 猜你喜欢 购买组合 内部推荐系统测试jps查询 转载于:https:/…

只能打开一进程

#define MUTEX_NAME _T("shit") //unicode环境下 /*#define MUTEX_NAME “shit" //多字节环境下*/ if (NULL OpenMutex(MUTEX_ALL_ACCESS, FALSE, MUTEX_NAME)) { CreateMutex(NULL, FALSE, MUTEX_NAME); } else { exit (0); } 转载于:https:…

Android游戏开发系统控件-CheckBox

Android游戏开发系统控件-CheckBox 2012/5/11 星期五 CheckBox是Android系统最普通的UI控件,继承了Button按钮 下面通过一个实例来学习 作者:wwj 功能:实现复选框的功能 创建项目“CheckBoxProject” 运行项目效果截图: 代码实现&…

改变Fragment的默认动画

FragmentTransaction ft getFragmentManager().beginTransaction(); //设置进入退出动画 ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);DetailsFragment newFragment DetailsFragment.newInstance();ft.replace(R.id.details_fragment_container, …

如何解决管理工具MSC拒绝访问?

1.改.msc文件类型信息入手(成功)资源管理器-菜单『工具』-文件夹选项-选项卡『文件类型』找到msc-点击『高级』在列表框中点击『打开(O)』-编辑用于执行操作的应用程序下面的文本框的文本改为: …

前端文章分享

https://blog.csdn.net/WEB_CSDN_SHARE 转载于:https://www.cnblogs.com/pingxingxian/p/11541035.html

在ubuntu中使用MYBASE

一直都使用MYBASE管理资料,个人信息、随笔、摘要还有项目文档都在里面记录。转到UBUNTU后自然想要继续使用,但遗憾的发现mybase并没有linux版,用WINE也不能运行,这下可愁坏我了。 研究了一下找到解决办法,方法如下&…

Android从无知到有知——NO.7

的ip拨号器在监听外拨电话时用的是系统提供的广播事件。而有些时候我们须要自己设定广播事件来满足特定的须要。Ok,今天整一下自己定义广播事件,我们用一个状态监測模块向一个3G模块发送报警信息来实现这一想法。 先定义一个3g模块用来接收特定的广播&am…

Flex 学习随笔 ---- 玩 Chart

上次好象写了Flex通过web服务访问数据库&#xff0c;并绑定一个简单的Chart. 在Flex Builder 3 里&#xff0c;有很多Chart &#xff0c;我好象只会一个ColumnChart。不过其他的也差不多。 来个简单的。上代码才是王道。。 Code<mx:Panel layout"absolute" right&…

HTML与CSS:设计滚动条(仅仅适用于IE浏览器)

摘自&#xff1a;http://www.cnblogs.com/xh831213/archive/2008/07/23/1249488.htmlscrollbar属性、样式详解1&#xff0e;overflow内容溢出时的设置&#xff08;设定被设定对象是否显示滚动条&#xff09;overflow-x水平方向内容溢出时的设置overflow-y垂直方向内容溢出时的设…

浅析拯救小矮人的 nlogn 算法及其证明

浅析拯救小矮人的 nlogn 算法及其证明 题型简介&#xff1a; 有 $ n $ 个人&#xff0c;第 $ i $ 个人身高 $ a_i $ 手长 $ b_i $ &#xff0c;他们为了从一个高为 $ H $ 的洞中出去&#xff0c;决定搭人梯。如果一个人和他下面的人的身高之和加上他的手长可以达到洞的高度&…

Android Material Design TabLayout属性app:tabMode和app: tabGravity

Android Material Design TabLayout属性app:tabMode和app: tabGravity Android Material Design 中的TabLayout有两个比较有用的属性 app:tabMode、app:tabGravity&#xff0c; &#xff08;1&#xff09;app:tabMode有两个值&#xff1a;fixed和scrollable。 &#xff08;2&am…