上一次,我们了解了委托,委托和Lambda表达式结合是一件灰常灰常爽的事情,这也是只有.Net才有,自己偷着笑去吧。几天这次,我要介绍一下继承和多态,这是进行面向对象编程必须熟练掌握的技术和思想。

1.1 类
继承,儿子继承父亲的遗产,这是生活中的体现,在面向对象的编程中,父亲和儿子都是对象的抽象集合,也就是类。什么是类呢?就是一些具有共同特征的对象集合,例如:狗都有四条腿,一条尾巴,两只眼睛,狗都会游泳,都爱吃骨头,所以我们把具有以上特征的动物抽象成狗,我们进行面向对象编程也是这样,面向对象的程序员必须具备抽象的能力。
1.1.1 字段
字段在类中属于封装的部分,一般是私有成员变量或常量,如:
private int _num1;
private bool _dispose;
_num1与 _dispose都是所属类的字段。
1.1.2 属性
属性是类的静态特征,如狗的腿有几条,眼睛有几只,都是狗的属性,在面向对象的编程中,属性是对字段封装,如:
private int _num1;
public int Num1 {
get { return _num1; }
set { _num1 = value; }
} private bool _dispose;
public bool Dispose{ get { return _dispose; }set { _dispose = value; }
}
Num1和Dispose都是所属类的属性,他们对各自的字段进行了封装,有的属性是只读的,还有的属性只能在构造函数中进行赋值,以后不可以修改,如下:
private int _dogColor; /// <summary> /// 只读属性:狗的颜色 /// </summary> public int DogColor { get { return _dogColor; } } private string _pid;/// <summary> /// 只能在构造函数中赋值属性:身份证号 /// </summary> public string PID{ get { return this._pid; }private set { this._pid = value; } }
1.1.3 方法
方法是类的行为能力,例如狗游泳,吃骨头,这都是狗的行为能力,在面向对象编程中,方法的结构是这样的:
/// <summary> /// 狗默默的吃方法,默默的所以是私有的 /// </summary>
private void Eat() {Console.WriteLine("真好吃啊!"); }
/// <summary>
/// 狗游泳,判断狗是否游过了river河 /// </summary> /// <param name="dogName">狗的名字</param> /// <param name="river">河的名字</param> /// <returns></returns>public bool Swim(string dogName,string river){bool isSwim = false;if (!string.IsNullOrEmpty(river)){Console.WriteLine(dogName + "游过了" + river); isSwim = true; } return isSwim; }
Eat和Swim都是狗类的方法,Eat方法没有参数没有返回值,Eat方法是私有的,只有狗类内部可以访问Eat方法;Swim方法有两个string类型参数,第一个参数是狗的名字,第二个参数是狗要游过的河流,返回bool类型判断狗是否游过了该河流,Swim方法是公有的,所有狗对象都可以访问Swim方法,关于private、protected、public的访问权限可以仔细阅读微软官方的MSDN帮助文档进行深入研究,不难理解,在这里我就不过多介绍了,到此关于类的介绍就这些了,下面继续介绍面向对象的核心知识之一——继承。
1.2 继承
1.2.1 继承的原理
继承是建立在类的基础上,具体类实现接口也可以叫做继承,在C#中一个类只能继承一个类,即不支持多重继承,生活中也是这样,一个人只能有一对亲生父母;但是C#中一个类可以实现多个接口,实现接口可以理解为,我们学习了新的本领,如,我们学会了说话,我们就实现了说话的接口,我们学会了写代码,我们就实现了写代码的接口。
可以看出,我们进行面向对象编程,就是模拟生活制作生活,所以一个好的程序员必定是一个美好生活的缔造者,广大女同胞们要注意了,选老公一定要选程序员,选择了程序员,你的后半生就幸福了,哈哈哈。
C#中的继承是这样的:
/// <summary> /// 产品类 /// </summary> public class Product { private string _name; public string Name { get { return _name; } set { _name = value; }
} private int _age; public int Age { get { return _age; } set { _age = value; } } } /// <summary> /// 发出声音接口 /// </summary> public interface Sound { bool MakeNoise(); } /// <summary> /// 显示图片接口 /// </summary> public interface ShowImage { void Show(string path); } public class NewProduct : Product, Sound, ShowImage {#region NewProduct类新成员 private string _color; public string Color { get { return _color; }
set { _color = value; } }
private void ChangeColor() { Console.WriteLine("颜色真的变了耶!"); } #endregion #region Sound 成员 public bool MakeNoise() { Console.WriteLine("哇塞,声音好大啊!"); return true; } #endregion #region ShowImage 成员
public void Show(string path){ Console.WriteLine("哎呦,来自{0}图片太漂亮了!",path); } #endregion}
从上面代码可以看出,接口没有方法的具体实现,接口方法的具体实现代码在继承该接口的类中实现,但要保持签名一致。
在面向对象的编程中,子类具有父类的所有特征,可以理解为子类是父类的扩展,父类里的所有非私有属性和非私有方法子类都可以访问。
1.2.1 继承的使用
实现接口也属于继承,那么什么时候继承类,什么时候继承接口呢?从程序的可扩展型和复用性考虑,为了松耦合度,只有有明确的父子关系的两个类才使用继承类,而实现接口在程序设计模式中经常用到,易于扩展。
比如,策略模式,对算法进行封装,经常用接口定义方法,然后具体类中具体实现,调用时由Context统一调用,在程序设计中使用适当的设计模式又是一件非常非常爽的事情,关于设计模式,我在这里也不多介绍,如果想深入了解,可以观看吕建中的官方视频,也可以看《大话设计模式》这本书,看完之后,你会感觉更爽。
1.3 多态
多态按字面的意思就是“多种状态”。在面向对象编程中,接口的多种不同的实现方式即为多态。其实多态更像是一种思想,不同实体实现同一接口是多态,重载函数方法是多态,方法重写是多态等等,多态就是对同一功能有不同的实现方式,关于多态理解其中的思想是最为重要的,在面向对象编程中灵活运用多态那也是非常非常爽的一件事。
继承多态总结:今天介绍的东西似乎有点多,其实不多,这些都是进行面向对象开发必须掌握的东西,如果你对上面说的内容感觉很陌生,那么你目前是不适合做移动开发的,你最应该的马上补充一下这是知识空白,当然面向对象的编程基础远不止这些,所以要想成为一流的开发人员,修炼是必不可缺的了。
好了,不在得瑟了,今天就到这里,下次还有更爽的,敬请期待。我们下次见。

Windows移动开发(三)——闭关修炼相关推荐

  1. Windows移动开发(二)——闭关修炼

    一些武侠小说里的大人物,为了争夺武林盟主,号召天下,经常闭关修炼一段时间,闭关期间只能接触送饭的人,并且关外还有很多守卫的人员.还有,无论是篮球还是足球运动员,他们在真正接触球之前,都必须做很长一段时 ...

  2. 来自菜鸟的逆袭,闭关修炼一个月,出关后成功拿下阿里,蚂蚁金服,美团三个大厂意向书!

    前言 楼主来自重庆一个普通的本科大学计算机学院,自己曾经在没拿到offer时也焦虑彷徨过,大大小小的公司自己也有投过,最终在自己闭关修炼一个月后成功斩获4个offer 腾讯 csig 后台开发 自我介 ...

  3. 普通本科菜菜海淘无人搭理,苦心闭关修炼一个月,出关后成功拿下阿里,蚂蚁金服,美团三个大厂意向书

    前言 楼主来自重庆一个普通的本科大学计算机学院,自己曾经在没拿到offer时也焦虑彷徨过,大大小小的公司自己也有投过,最终在自己闭关修炼一个月后成功斩获4个offer 腾讯 csig 后台开发 自我介 ...

  4. Windows驱动开发学习笔记(三)—— 内核空间内核模块

    Windows驱动开发学习笔记(三)-- 内核空间&内核模块 内核空间 实验 第一步:编译如下代码 第二步:将 .sys 文件拷贝到虚拟机中 第三步:部署 .sys 文件并运行 第四步:创建一 ...

  5. 【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁

    上两篇文章我们初步接触了ABI-应用程序二进制接口的概念,点击链接查看上一篇文章:[软件开发底层知识修炼]二十二 ABI-应用程序二进制接口 二.了解了为什么会有ABI的存在.本篇文章继续学习ABI ...

  6. 【软件开发底层知识修炼】十六 快速学习GDB调试三 使用GDB的数据断点监测变量是否改变

    上一篇文章我们学习了如何使用GDB进行软件断点调试和硬件断点调试:[软件开发底层知识修炼]十五 快速学习GDB调试二 使用GDB进行断点调试 本篇文章继续上一篇文章的学习,如何使用GDB的数据断点监测 ...

  7. 十月一“闭关修炼”,读完这些Java技术栈,愿金九银十过五斩六

    十月一由于疫情还是有很多人为了安全不会去旅游,实际上,对于有跳槽打算的人来说,现在正是"闭关修炼"的好时机,但很多人不知道从何开始学习,也正为即将到来的金九银十发愁!今天,小编就要 ...

  8. Java闭关修炼64课 很适合新手学习的JAVA视频教程

    Java闭关修炼64课 很适合新手学习的JAVA视频教程 java闭关修炼第一课 什么是java(1).rar   java闭关修炼第一课 什么是java.rar   java闭关修炼第七课 基础语言 ...

  9. 开始闭关修炼 冥思微软之大未来

    盖茨开始闭关修炼 冥思微软之大未来 (2005.03.30)   华尔街日报   <script src="/adv/news_ad.asp?news_id=20356&sub ...

最新文章

  1. ue4商城资源 The Forest v1.5 森林景观场景
  2. 【 FPGA 】FIR 滤波器之多相插值器(Polyphase Interpolator)
  3. Windows8 正式版最简单的去除桌面水印方法
  4. 通过FILETIME得到时间
  5. JEP 277“增强弃用”非常好。 但这是一个更好的选择
  6. Leetcode--145. 二叉树的后序遍历(迭代递归)
  7. ConcurrentHashMap 源码
  8. BeyondCompare3提示许可密钥过期完美解决方法:3281-0350
  9. pdf 深入理解kotlin协程_协程初探
  10. Eclipse — 如何导入MySQL驱动
  11. VS2017安装方法
  12. java课程 数独 文库_数独教案-完整版
  13. Word 2019 更改默认模板的字体设置
  14. 2021年塔城某施工项目招标公告
  15. 参加2009 ESRI年会的一点记录和感想
  16. IdentityServer4(七):Consent授权页支持
  17. 画一个神经元的结构简图,神经元的简图画法
  18. 2019年7月20日针对iPhone7/7P有锁机的爆破限制
  19. 先验概率、最大似然估计、贝叶斯估计、最大后验概率
  20. 精通Node.js: 你应该阅读的书籍

热门文章

  1. android滚动悬停布局,android布局滑动到顶端悬浮,录音
  2. python怎么使用预训练的模型_Tensorflow加载Vgg预训练模型操作
  3. 辅助驾驶等级_BBA霸榜、特斯拉折戟 E-NCAP辅助驾驶评测结果公布
  4. 如何创建linux 脚本,如何创建和执行shell脚本
  5. mysqld --initialize --console 没有 打印信息_JavaScript学习笔记(三)-- 循环结构
  6. 图像局部特征(三)--FAST角点检测子
  7. 汇编学习--7.16--端口
  8. bootstrap拖动div_BootStrap modal实现拖拽功能
  9. python测试脚本 进制转换_[python] 转换python脚本程序为二进制ELF
  10. 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...