传智播客ppt课件_第1页
传智播客ppt课件_第2页
传智播客ppt课件_第3页
传智播客ppt课件_第4页
传智播客ppt课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,北京传智播客教育,C#面向对象基础-让子弹飞,讲师:赵晓虎,简要复习,Try-catch-finallyStatic索引器thisintindex,thisstrings,索引器是可以重载的。Namespace,今天要用到的技能点,抽象类、抽象方法的运用方法重写virtual、abstract和override“类”、”属性”、“成员变量”、“方法”等的运用C#绘图技术GDI(图形设备接口,简单介绍)Timer控件、Panel控件体会方法重载IsHit()方法课前热身:GDI+绘制“某产品年度销售情况”传智播客员工通讯录类设计,关于C#画图的一些介绍1(GDI+),命名空间:System.Drawing;(基本绘图操作)Graphics对象,可以理解为一只画笔,要在哪个控件上绘图,就要得到对应控件的Graphics对象(就是获得对应控件的绘图表面)。获得Graphics对象一般有两种方式:1.控件.CreateGraphics()/通过该方式创建后要调用g.Dispose()方法释放资源。2.在重写OnPaint()方法中通过参数PaintEventArgse.Graphics;来获得,一般使用为Paint事件中。/通过这种方式一般不需要手动调用Dispose();区别OnPaint()与窗体的Paint事件。(画一些简单图形)什么样类型的对象需要使用完成后Dispose()?答:Pen,Brush,Font,Image,Ico,FileStream(文件操作),网络操作等。(在这些类中封装了一些操作系统的资源)/Pens.XXX或Brushes.XXX等不需要,手动创建的才需要。强行释放资源会出错.,关于C#画图的一些介绍2,GDI+中的坐标系。原点在左上角。X水平向右为正,Y垂直向下为正。(Demo,鼠标移动,显示坐标)/定义一个图形的坐标,即指定了该图形离顶部与左边的距离。/每个控件的左上角都是(0,0)问题:完成一篇word文档,在电脑上和打印机上显示效果一样,为什么?世界坐标(逻辑坐标)、页面坐标、设备坐标,为了简单理解即可。从使用的角度看,GDI+坐标系是一种转换规则,把你所制定的逻辑数据转换成最终设备驱动所能使用的数据。Point、Size、Rectangle/封装,对”坐标”的封装DrawXXX(),画各种图形,PenFillXXX(),填充,画实心的,Brush,热身1:某工厂某产品的年度销售情况表,知识点,虚方法:使用virtual关键字修饰,使用virtual关键字修饰的方法在本类中必须有实现,哪怕是空的。虚方法存在的意义就是为了让子类重写。子类可以重写,也可以不重写。方法重写:只有用virtual、abstract、override修饰的方法在继承后子类可以重写。/实现方法重写的方式3个关键字什么是方法重写?答:方法重写是指子类继承父类后在子类中有一个与父类中某个方法签名一致,但方法内容可以重新定义的方法,并用override关键字修饰。抽象类:abstract关键字修饰;不能实例化;可以有抽象成员也可以有非抽象成员(1.有抽象成员的类必须标记为abstract,并且不能有任何实现;2.类中的抽象成员在子类中必须实现(override),除非子类也是抽象类);virtual方法和abstract方法的区别:virtual方法子类可以override,也可以不override。Abstract标记的成员在子类中必须override,除非子类也是抽象类。ToString()方法、Equals()来自于Object,任何类都有,通过override有了不同的实现(举例,自己的类实现ToString()),思考:父类到底要不要写成抽象类?抽象类的意义:不能从抽象类创建对象,它的意义在于被扩展。代码重用、多态(简化了isDataType的判断)。普通类的继承能实现多态吗?方法重写的意义:为所有子类定义了某种规范(某种必须有的规范),多态。/这里的规范可以理解为”行为“,就是方法。/以后用到得接口等中提到的规范,其实目的就是让新增加的类必须具有某些方法,这样才能满足我们程序中的要求。(对程序扩展做了一定的约束。),练习,练习1:形状类Shape(父类),包含Size属性和计算面积getArea()方法。圆类Circle继承Shape,可以计算圆的面积。正方形类Square继承Shape,可以计算正方形面积。最终要求能实现:Shapesh=newCircle(5);sh.getArea()能计算出圆的面积。Shapesh=newSquare(5);sh.getArea()能计算出正方形的面积。,热身:传智播客员工通讯录,传智播客员工通讯录的类设计,员工,属性:(姓名,联系电话、Email);方法:Print(),将自己的信息画到Panel上。讲师,继承自员工,有自己特有的。市场人员,继承自员工,有自己特有的教学部经理,继承自讲师。重写Teach()方法,内容变成了“讲公开课”。市场部经理,继承自市场人员。重写Publicize()方法,内容变成了“区域宣传”。注意:所有人员均有显示自己详细信息的功能(姓名,电话、Email、职位)在类设计过程中考虑是否使用抽象类方法重写时,考虑使用virtual还是abstract,为什么?某个类到底应该从谁来继承,比如SellerManager应该直接继承自Seller而不是Employee。,测试传智播客员工通讯录类的设计,新建一个窗体该窗体有一个泛型集合(父类数组代替),用来存储员工信息窗体加载时初始化5位员工,其中包括2个经理,3个普通员工。单击“显示”按钮时,循环将所有员工信息通过“画图”(Graphics),显示到Panel上。注意:体会父类指向子类时的方法调用。(多态就是通过这个实现的,这就是为什么我们总是Personp=newChinese();而不是Chinesec=newChinese();),让子弹飞-游戏介绍,演示游戏,分析游戏中的对象和类,Plane位置(X,Y)被击中次数HitTimes速度Speed是否被击中IsHit飞机的有效区域Rectangle类型FieldArea大小Size=方法=Draw()把自己会知道控件上Move()方法Bullet位置(X,Y)速度Speed大小Size有效区域Rectangle类型,FieldArea=方法=Hit()判断击中目标了吗?Move()移动Draw()绘制自身开始攻击Fire().,抽象Plane与Bullet的父类,GameObject:属性:坐标X,Y速度Speed大小Size区域FieldArea方法:移动Move()绘制自身Draw(),开始编写窗体代码,首先添加需要的资源到Resources(方便稍后使用),这种方式可将图片、音频等资源直接编译到exe或dll文件中,将来程序发布时只需要一个可执行文件即可,无需发布所有图片、音频等其他资源。与web程序不同。第一步:窗体一开始运行就需要一个飞机【plane.Draw()】,让飞机动起来【plane.Move()】。在窗体上添加Plane成员变量。第二步:单击鼠标时需要产生一个子弹【bullet.Draw()】,并且子弹需要“飞”【bullet.Move()】何时判断是否相撞,在哪里写代码?判断相撞的代码应该写在哪个类?PlaneorBullet?完成IsHit()判断是否相撞的代码。,当飞机第一次被击中时,控制闪烁,通过两个变量,plane.isHit;plane.isVisible;飞机被击中两次后,播放声音,并重新实例化一架飞机。,扩展:又增加了一个飞船,体会Bullet类的IsHit()方法的设计,体会方法重载IsHit(Planeplane)IsHit(Shipship),总结:如何分析系统中的类和对象,Virtual注意:1.使用virtual关键字表示方法,写在返回值的签名publicvirutal或virtualpublic2.使用virutal关键字修饰的方法必须有实现3.子类可以重写,也可以不重写。子类重写时使用override关键字。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论