付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二回:对抽象编程:接口和抽象类本文将介绍以下内容:面象:多态接口抽象类1. 引言在我之前的一篇t抽象类和接口的谁是谁非中,和同事的,得到很多朋友的关的系统性理论,我认顺便也在此做以注,因为是不成体系的,所以给大家了解造成不便,同时关于这个为也有必要做以总结,因此才有了本篇的新鲜出炉。同时,我将把上贴中交代。2. 概念引入接口?接口是包含一组虚方法的抽象类型,其中每法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR 允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员。一个类可以实现多个接口,当一个类继承某个接口时,它不仅
2、要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。定义方法为:publicerfaceparableCompareTo(object o);public class TestCls: IComparablepublic TestCls()private public_value;Valueget return _value; set _value = value; publicCompareTo(object o)/使用 as 模式进行判断TestCls aCls = o as TestCls; if (aCls != null)/实现抽象方法 returnpareTo(a
3、Cls._value);抽象类?抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用 new 关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须外,实现抽象方法由overriding 方法来实现。为抽象类。另定义方法为:/ / 定义抽象类/ abstract public class Animal/定义静态字段sic protected_id;/定义属性public abstract sicget; set;Id/定义方法public abstract void Ea
4、t();/定义索引器public string thisget; set;i/ / 实现抽象类/ public class Dog: Animalpublic sic overrideget return _id; set _id = value;Idpublic override void Eat()Console.Write(Dog Eats.)3. 相同点和不同点3.1 相同点都不能被直接实例化,都可以通过继承实现其抽象方法。都是面向抽象编程的技术基础,实现了诸多的设计模式。3.2 不同点接口支持多继承;抽象类不能实现多继承。接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的
5、成员。接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。类型。例如,Struct 就可以接口可以作用于值类型和类型;抽象类只能作用于继承接口,而不能继承类。通过相同与不同的比较,只能说接口和抽象类,各有,但无优略。在实际的编程实践中,要视具体情况来酌情量才,但是以下的经验和积累,或许能给大家一些启示,除了一些积累之外,很多都来源于经典,我相信经得起考验。所以在规则与场合中,学习这些经典,最重要的是,当然我将以一家
6、之言博大家之笑,看官请继续。3.3 规则与场合1.2.请记住,面象的一个最重要的原则就是:面向接口编程。借助接口和抽象类,23 个设计模式中的很多来就是:面向抽象编程。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。接口着重于 CAN-DO 关系类型,而抽象类则偏重于 IS-A 式的关系;接口多定义对象的行为;抽象类多定义对象的属性;接口定义可以使用 public、protected、 ernal 和 private 修饰符,但是几乎所有的接口都定义为 public,原因就不必多说了。被巧妙的实现了,我认为其精髓简单说.7.“接口不变”,是应该考虑的重要而不
7、能更改现有接口。尽量将接口设计成功能单一的功能块,以.NET Framework 为例,IDis。所以,在由接口增加扩展时,应该增加新的接口,8.able、parable、IEquatable、IEnumerable 等都只包含一个公共方法。接口名称前面的大写字母“I”是一个约定,正如字段名以下划线开头一样,请坚持这些原则。在接口中,所有的方法都默认为 public。如果预计会出现版本问题,可以创建“抽象类”。例如,创建了狗(Dog)、鸡(Chicken)和鸭(Duck),那么应该考虑抽象出动物(Animal)来应对以后可能出现风马牛的事情。而向接口中添加新成员则会强制要求修改所有派生类,并重
8、新编译,所以版本式最好以抽象类来实现。2.13.14.从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象器的实实现。对抽象类不能使用 new 关键字,也不能被密封,原因是抽象类不能被实例化。在抽象方法中不能使用 sic 或 virtual 修饰符。以上的规则,我就厚颜的暂定为 T14 条吧,写的这么累,就当一时的奖赏吧。大家也可以互通有无,我将及时修订。4. 经典示例4.1 绝对经典.NET Framework 是学习的最好资源,有意识的研究 FCL 是每个.NET 程序员的必修课,关于接口和抽象类在 FCL 中的使用,我有以下的建议:FCL 对集合类使用了基于接口的设计,所以请关注 System.Collections 中关于接口的设计实现;FCL 对数据流相关类使用了基于抽象类的设计,所以请关注 System.IO.Stream 类的抽象类设计机制。4.2 别样小菜理解,因此给经典打上“相对”的记号,至于什么时候晋升为“绝对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人才储备应急预案(3篇)
- 促销活动策划宣传方案(3篇)
- 妮维雅营销方案分析(3篇)
- 卖礼品营销方案(3篇)
- 张杰营销方案(3篇)
- 抽奖线上活动方案策划(3篇)
- 新年智能活动策划方案(3篇)
- 智慧农业施工方案(3篇)
- 桥梁水边施工方案(3篇)
- 汽车租凭营销方案(3篇)
- 2026年陕西航空职业技术学院单招职业技能测试题库附参考答案详解(完整版)
- 仪器设备标识管理制度培训
- 外聘人员考核奖惩制度
- 2026年岳阳现代服务职业学院单招职业技能考试题库及答案详解(各地真题)
- 2026年安徽国防科技职业学院单招职业技能测试题库及答案详解参考
- 2026年及未来5年中国非油炸方便面行业市场全景监测及投资前景展望报告
- 2026年河南应用技术职业学院单招职业适应性测试题库有答案解析
- 2026年人教PEP版新教材四年级下册英语教学计划(含进度表)
- 2026年九江职业大学单招职业技能考试题库含答案详解(模拟题)
- 2026年安徽电子信息职业技术学院单招综合素质考试题库附答案解析
- 彩票管理条例培训课件
评论
0/150
提交评论