传智播客课件

上传人:简****9 文档编号:95475134 上传时间:2019-08-19 格式:PPT 页数:21 大小:411.50KB
返回 下载 相关 举报
传智播客课件_第1页
第1页 / 共21页
传智播客课件_第2页
第2页 / 共21页
传智播客课件_第3页
第3页 / 共21页
传智播客课件_第4页
第4页 / 共21页
传智播客课件_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《传智播客课件》由会员分享,可在线阅读,更多相关《传智播客课件(21页珍藏版)》请在金锄头文库上搜索。

1、北京传智播客教育 ,C#面向对象基础-让子弹飞,讲师:赵晓虎,简要复习,Try-catch-finally Static 索引器thisint index,thisstring s,索引器是可以重载的。 Namespace,今天要用到的技能点,抽象类、抽象方法的运用 方法重写virtual、abstract和override “类”、”属性”、“成员变量”、“方法”等的运用 C#绘图技术GDI(图形设备接口,简单介绍) Timer控件、Panel控件 体会方法重载IsHit()方法 课前热身: GDI+绘制“某产品年度销售情况” 传智播客员工通讯录类设计,关于C#画图的一些介绍1(GDI+),

2、命名空间:System.Drawing;(基本绘图操作) Graphics对象,可以理解为一只画笔,要在哪个控件上绘图,就要得到对应控件的Graphics对象(就是获得对应控件的绘图表面)。获得Graphics对象一般有两种方式:1.控件.CreateGraphics()/通过该方式创建后要调用g.Dispose()方法释放资源。2.在重写OnPaint()方法中通过参数PaintEventArgs e.Graphics;来获得,一般使用为Paint事件中。/通过这种方式一般不需要手动调用Dispose();区别OnPaint()与窗体的Paint事件。(画一些简单图形) 什么样类型的对象需要

3、使用完成后Dispose()? 答:Pen,Brush,Font,Image,Ico,FileStream(文件操作),网络操作等。 (在这些类中封装了一些操作系统的资源)/Pens.XXX或Brushes.XXX等不需要,手动创建的才需要。强行释放资源会出错.,关于C#画图的一些介绍2,GDI+中的坐标系。 原点在左上角。X水平向右为正,Y垂直向下为正。 (Demo,鼠标移动,显示坐标)/定义一个图形的坐标,即指定了该图形离顶部与左边的距离。/每个控件的左上角都是(0,0) 问题:完成一篇word文档,在电脑上和打印机上显示效果一样,为什么? 世界坐标(逻辑坐标)、页面坐标、设备坐标,为了简

4、单理解即可。 从使用的角度看,GDI+坐标系是一种转换规则,把你所制定的逻辑数据转换成最终设备驱动所能使用的数据。 Point、Size、Rectangle/封装,对”坐标”的封装 DrawXXX(),画各种图形,Pen FillXXX(),填充,画实心的,Brush,热身1:某工厂某产品的年度销售情况表,知识点,虚方法:使用virtual关键字修饰,使用virtual关键字修饰的方法在本类中必须有实现,哪怕是空的。虚方法存在的意义就是为了让子类重写。子类可以重写,也可以不重写。 方法重写:只有用virtual、abstract、override修饰的方法在继承后子类可以重写。/实现方法重写的

5、方式3个关键字 什么是方法重写?答:方法重写是指子类继承父类后在子类中有一个与父类中某个方法签名一致,但方法内容可以重新定义的方法,并用override关键字修饰。 抽象类:abstract关键字修饰;不能实例化;可以有抽象成员也可以有非抽象成员(1.有抽象成员的类必须标记为abstract,并且不能有任何实现;2.类中的抽象成员在子类中必须实现(override),除非子类也是抽象类); virtual方法和abstract方法的区别: virtual方法子类可以override,也可以不override。 Abstract标记的成员在子类中必须override,除非子类也是抽象类。 ToS

6、tring()方法、Equals()来自于Object,任何类都有,通过override有了不同的实现(举例,自己的类实现ToString()),思考:父类到底要不要写成抽象类? 抽象类的意义:不能从抽象类创建对象,它的意义在于被扩展。代码重用、多态(简化了is DataType的判断)。普通类的继承能实现多态吗? 方法重写的意义:为所有子类定义了某种规范(某种必须有的规范),多态。/这里的规范可以理解为”行为“,就是方法。/以后用到得接口等中提到的规范,其实目的就是让新增加的类必须具有某些方法,这样才能满足我们程序中的要求。(对程序扩展做了一定的约束。),练习,练习1:形状类Shape(父类

7、),包含Size属性和计算面积getArea()方法。圆类Circle继承Shape,可以计算圆的面积。正方形类Square继承Shape,可以计算正方形面积。最终要求能实现:Shape sh=new Circle(5);sh.getArea()能计算出圆的面积。Shape sh=new Square(5);sh.getArea()能计算出正方形的面积。,热身:传智播客员工通讯录,传智播客员工通讯录的类设计,员工,属性:(姓名,联系电话、Email);方法:Print(),将自己的信息画到Panel上。 讲师,继承自员工,有自己特有的。 市场人员,继承自员工,有自己特有的 教学部经理,继承自讲

8、师。重写Teach()方法,内容变成了“讲公开课”。 市场部经理,继承自市场人员。重写Publicize()方法,内容变成了“区域宣传”。 注意: 所有人员均有显示自己详细信息的功能(姓名,电话、Email、职位) 在类设计过程中考虑是否使用抽象类 方法重写时,考虑使用virtual还是abstract,为什么? 某个类到底应该从谁来继承,比如SellerManager应该直接继承自Seller而不是Employee。,测试传智播客员工通讯录类的设计,新建一个窗体 该窗体有一个泛型集合(父类数组代替),用来存储员工信息 窗体加载时初始化5位员工,其中包括2个经理,3个普通员工。 单击“显示”按

9、钮时,循环将所有员工信息通过“画图”(Graphics),显示到Panel上。 注意:体会父类指向子类时的方法调用。(多态就是通过这个实现的,这就是为什么我们总是Person p=new Chinese();而不是Chinese c=new Chinese();),让子弹飞-游戏介绍,演示游戏,分析游戏中的对象和类,Plane 位置(X,Y) 被击中次数HitTimes 速度Speed 是否被击中IsHit 飞机的有效区域Rectangle类型FieldArea 大小Size =方法= Draw()把自己会知道控件上 Move()方法 Bullet 位置(X,Y) 速度Speed 大小Size

10、 有效区域Rectangle类型,FieldArea =方法= Hit()判断击中目标了吗? Move()移动 Draw()绘制自身 开始攻击Fire() . ,抽象Plane与Bullet的父类,GameObject: 属性: 坐标X,Y 速度Speed 大小Size 区域FieldArea 方法: 移动Move() 绘制自身Draw(),开始编写窗体代码,首先添加需要的资源到Resources(方便稍后使用),这种方式可将图片、音频等资源直接编译到exe或dll文件中,将来程序发布时只需要一个可执行文件即可,无需发布所有图片、音频等其他资源。与web程序不同。 第一步:窗体一开始运行就需要

11、一个飞机【plane.Draw()】,让飞机动起来【plane.Move()】。在窗体上添加Plane成员变量。 第二步:单击鼠标时需要产生一个子弹【bullet.Draw()】,并且子弹需要“飞”【bullet.Move()】 何时判断是否相撞,在哪里写代码? 判断相撞的代码应该写在哪个类?Plane or Bullet? 完成IsHit()判断是否相撞的代码。,当飞机第一次被击中时,控制闪烁,通过两个变量,plane.isHit;plane.isVisible; 飞机被击中两次后,播放声音,并重新实例化一架飞机。,扩展:又增加了一个飞船,体会Bullet类的IsHit()方法的设计,体会方

12、法重载 IsHit(Plane plane) IsHit(Ship ship),总结:如何分析系统中的类和对象,Virtual注意: 1.使用virtual关键字表示方法,写在返回值的签名public virutal或virtual public 2.使用virutal关键字修饰的方法必须有实现 3.子类可以重写,也可以不重写。 子类重写时使用override关键字。 注:方法重写时,方法签名必须与父类中的虚方法完全一致,否则重写不成功,其中包括“返回值”,Abstract注意,抽象类不能被实例化 如果一个类中有任何抽象成员,那么这个类也必须是抽象类abstract class 子类继承抽象类后,必须重写父类中的所有抽象成员,除非子类也是一个抽象类 抽象成员在抽象类中不能有任何实现。 抽象类中可以有抽象成员也可以有非抽象成员,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号