《传智播客课件.ppt》由会员分享,可在线阅读,更多相关《传智播客课件.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、高级软件人才实作培训专家高级软件人才实作培训专家简要复习lTry-catch-finallylStaticl索引器thisint index,thisstring s,索引器是可以重载的。lNamespace高级软件人才实作培训专家高级软件人才实作培训专家今天要用到的技能点l抽象类、抽象方法的运用l方法重写virtual、abstract和overridel“类”、”属性”、“成员变量”、“方法”等的运用lC#绘图技术GDI(图形设备接口,简单介绍)lTimer控件、Panel控件l体会方法重载IsHit()方法l课前热身:GDI+绘制“某产品年度销售情况”传智播客员工通讯录类设计高级软件人才
2、实作培训专家高级软件人才实作培训专家关于C#画图的一些介绍1(GDI+)l命名空间:System.Drawing;(基本绘图操作)lGraphics对象,可以理解为一只画笔,要在哪个控件上绘图,就要得到对应控件的Graphics对象(就是获得对应控件的绘图表面)。获得Graphics对象一般有两种方式:1.控件.CreateGraphics()/通过该方式创建后要调用g.Dispose()方法释放资源。2.在重写OnPaint()方法中通过参数PaintEventArgs e.Graphics;来获得,一般使用为Paint事件中。/通过这种方式一般不需要手动调用Dispose();区别OnPa
3、int()与窗体的Paint事件。(画一些简单图形)l什么样类型的对象需要使用完成后Dispose()?答:Pen,Brush,Font,Image,Ico,(文件操作),网络操作等。(在这些类中封装了一些操作系统的资源)/Pens.XXX或Brushes.XXX等不需要,手动创建的才需要。强行释放资源会出错.高级软件人才实作培训专家高级软件人才实作培训专家关于C#画图的一些介绍2lGDI+中的坐标系。中的坐标系。原点在左上角。X水平向右为正,Y垂直向下为正。(Demo,鼠标移动,显示坐标)/定义一个图形的坐标,即指定了该图形离顶部与左边的距离。/每个控件的左上角都是(0,0)问题:完成一篇w
4、ord文档,在电脑上和打印机上显示效果一样,为什么?世界坐标(逻辑坐标)、页面坐标、设备坐标,为了简单理解即可。从使用的角度看,GDI+坐标系是一种转换规则,把你所制定的逻辑数据转换成最终设备驱动所能使用的数据。Point、Size、Rectangle/封装,对”坐标”的封装lDrawXXX(),画各种图形,PenlFillXXX(),填充,画实心的,Brush高级软件人才实作培训专家高级软件人才实作培训专家热身1:某工厂某产品的年度销售情况表高级软件人才实作培训专家高级软件人才实作培训专家知识点l虚方法:使用virtual关键字修饰,使用virtual关键字修饰的方法在本类中必须有实现,哪怕
5、是空的。虚方法存在的意义就是为了让子类重写。子类可以重写,也可以不重写。l方法重写:只有用virtual、abstract、override修饰的方法在继承后子类可以重写。/实现方法重写的方式3个关键字l什么是方法重写?答:方法重写是指子类继承父类后在子类中有一个与父类中某个方法签名一致,但方法内容可以重新定义的方法,并用override关键字修饰。l抽象类:abstract关键字修饰;不能实例化;可以有抽象成员也可以有非抽象成员(1.有抽象成员的类必须标记为abstract,并且不能有任何实现;2.类中的抽象成员在子类中必须实现(override),除非子类也是抽象类);lvirtual方法
6、和abstract方法的区别:virtual方法子类可以override,也可以不override。Abstract标记的成员在子类中必须override,除非子类也是抽象类。lToString()方法、Equals()来自于Object,任何类都有,通过override有了不同的实现(举例,自己的类实现ToString())高级软件人才实作培训专家高级软件人才实作培训专家l思考:父类到底要不要写成抽象类?l抽象类的意义:不能从抽象类创建对象,它的意义在于被扩展。代码重用、多态(简化了is DataType的判断)。普通类的继承能实现多态吗?l方法重写的意义:为所有子类定义了某种规范(某种必须
7、有的规范),多态。/这里的规范可以理解为”行为“,就是方法。/以后用到得接口等中提到的规范,其实目的就是让新增加的类必须具有某些方法,这样才能满足我们程序中的要求。(对程序扩展做了一定的约束。)高级软件人才实作培训专家高级软件人才实作培训专家练习l练习1:形状类Shape(父类),包含Size属性和计算面积getArea()方法。圆类Circle继承Shape,可以计算圆的面积。正方形类Square继承Shape,可以计算正方形面积。最终要求能实现:Shape sh=new Circle(5);sh.getArea()能计算出圆的面积。Shape sh=new Square(5);sh.get
8、Area()能计算出正方形的面积。高级软件人才实作培训专家高级软件人才实作培训专家热身:传智播客员工通讯录高级软件人才实作培训专家高级软件人才实作培训专家传智播客员工通讯录的类设计l员工,属性:(姓名,联系电话、Email);方法:Print(),将自己的信息画到Panel上。l讲师,继承自员工,有自己特有的。l市场人员,继承自员工,有自己特有的l教学部经理,继承自讲师。重写Teach()方法,内容变成了“讲公开课”。l市场部经理,继承自市场人员。重写Publicize()方法,内容变成了“区域宣传”。l注意:所有人员均有显示自己详细信息的功能(姓名,电话、Email、职位)在类设计过程中考虑
9、是否使用抽象类方法重写时,考虑使用virtual还是abstract,为什么?某个类到底应该从谁来继承,比如SellerManager应该直接继承自Seller而不是Employee。高级软件人才实作培训专家高级软件人才实作培训专家测试传智播客员工通讯录类的设计l新建一个窗体l该窗体有一个泛型集合(父类数组代替),用来存储员工信息l窗体加载时初始化5位员工,其中包括2个经理,3个普通员工。l单击“显示”按钮时,循环将所有员工信息通过“画图”(Graphics),显示到Panel上。l注意:体会父类指向子类时的方法调用。注意:体会父类指向子类时的方法调用。(多态就是通过这个实(多态就是通过这个实
10、现的,这就是为什么我们总是现的,这就是为什么我们总是Person p=new Chinese();而不是而不是Chinese c=new Chinese();)高级软件人才实作培训专家高级软件人才实作培训专家让子弹飞-游戏介绍l演示游戏高级软件人才实作培训专家高级软件人才实作培训专家分析游戏中的对象和类lPlane位置(X,Y)被击中次数HitTimes速度Speed是否被击中IsHit飞机的有效区域Rectangle类型FieldArea大小Size=方法=Draw()把自己会知道控件上Move()方法lBullet位置(X,Y)速度Speed大小Size有效区域Rectangle类型,Fi
11、eldArea=方法=Hit()判断击中目标了吗?Move()移动Draw()绘制自身开始攻击Fire().高级软件人才实作培训专家高级软件人才实作培训专家抽象Plane与Bullet的父类lGameObject:l属性:坐标X,Y速度Speed大小Size区域FieldAreal方法:移动Move()绘制自身Draw()高级软件人才实作培训专家高级软件人才实作培训专家开始编写窗体代码l首先添加需要的资源到Resources(方便稍后使用),这种方式可将图片、音频等资源直接编译到exe或dll文件中,将来程序发布时只需要一个可执行文件即可,无需发布所有图片、音频等其他资源。与web程序不同。l
12、第一步:窗体一开始运行就需要一个飞机【plane.Draw()】,让飞机动起来【plane.Move()】。在窗体上添加Plane成员变量。l第二步:单击鼠标时需要产生一个子弹【bullet.Draw()】,并且子弹需要“飞”【bullet.Move()】l何时判断是否相撞,在哪里写代码?l判断相撞的代码应该写在哪个类?Plane or Bullet?l完成IsHit()判断是否相撞的代码。高级软件人才实作培训专家高级软件人才实作培训专家l当飞机第一次被击中时,控制闪烁,通过两个变量,plane.isHit;plane.isVisible;l飞机被击中两次后,播放声音,并重新实例化一架飞机。高
13、级软件人才实作培训专家高级软件人才实作培训专家扩展:又增加了一个飞船l体会Bullet类的IsHit()方法的设计,体会方法重载IsHit(Plane plane)IsHit(Ship ship)高级软件人才实作培训专家高级软件人才实作培训专家总结:如何分析系统中的类和对象高级软件人才实作培训专家高级软件人才实作培训专家lVirtual注意:l1.使用virtual关键字表示方法,写在返回值的签名public virutal或virtual publicl2.使用virutal关键字修饰的方法必须有实现l3.子类可以重写,也可以不重写。l子类重写时使用override关键字。l注:方法重写时,方法签名必须与父类中的虚方法完全一致,否则重写不成功,其中包括“返回值”高级软件人才实作培训专家高级软件人才实作培训专家Abstract注意l抽象类不能被实例化l如果一个类中有任何抽象成员,那么这个类也必须是抽象类abstract classl子类继承抽象类后,必须重写父类中的所有抽象成员,除非子类也是一个抽象类l抽象成员在抽象类中不能有任何实现。l抽象类中可以有抽象成员也可以有非抽象成员