vb高级程序设计-对抗扫雷游戏项目开发_第1页
vb高级程序设计-对抗扫雷游戏项目开发_第2页
vb高级程序设计-对抗扫雷游戏项目开发_第3页
vb高级程序设计-对抗扫雷游戏项目开发_第4页
vb高级程序设计-对抗扫雷游戏项目开发_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

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

文档简介

主讲:江丽,VB高级程序设计,2011年上学期,主讲:江丽,【项目1】 “对抗扫雷游戏”项目开发,2011年上学期,教学目标,1. 深入了解和掌握类的创建和使用方法2. 深入了解和掌握自定义控件创建和使用方法3. 掌握VB.NET图形化开发方法,1游戏流程,【任务1:“对抗扫雷游戏”项目总体分析 】,2. 项目文件架构图3. 程序运行方式 单击此处运行程序,【任务2:VB.NET的图形化开发与实现】,本次任务要求掌握以下两个方面的知识:1. 掌握在VB.NET环境下绘制图形和文本的一般方法。2. 掌握在VB.NET环境下如何将系统控件外观改为具有个性化外观。,通过该次学习,希望同学们课后借助各学习渠道对VB.NET中图形制作有更深入的了解。,向Windows桌面绘制文本和图形需要对图形设备接口(GDI+)编程。GDI+支持Windows把文本、线条、矩形和更加复杂的图形(如多边形和曲线)显示到屏幕或其他图形设备(如打印机)。另外,还允许渲染图像(如位图图像)。,处理GDI+时需要使用下面的命名空间和类:1System.Drawing命名空间:含有Pen、Brush等类成员用以定义要绘制图形形状以及它们的轮廓和填充方式。2System.Drawing.Drawing2D命名空间:扩充了System.Drawing命名空间的功能,包含了一些新增类,如:渐变笔刷等。3System.Graphics类:用来绘制图形和图像,输出方向可以是窗体、打印机及其它绘图设备(主要看实例化的对象是谁)。,一、Color类所属命名空间:System.Drawing作用:用来处理颜色。1常用属性(1)A属性:返回指定颜色的Alpha成分值。(2)R属性:返回红色成分值。(3)G属性:返回绿色成分值。(4)B属性:返回蓝色成分值。以上四个属性的值范围均为:0-255,(5)共享预定颜色属性:有多种预定义颜色,如Red、Pink、Blue等。由于它们是共享方式属性,所以无需对Color类实例化即可直接引用。例定义颜色对象mycolor,值为黄色。Dim myColor As Color = Color.Yellow,2常用方法Color.FromArgb通过此方法可以由用户自定义颜色,该方法有四种重载方法,具体见教材。例定义颜色对象circleColor,透明度、红、绿、兰分量值分别为100,26,57,126,229。Dim circleColor As Color = Color.FromArgb(100,26,57,126,229),二、笔刷当填充封闭图形(如:圆、长方形等)区域时,就要用到笔刷。VB.NET支持4种笔刷:单色笔刷、带图案笔刷、渐变笔刷及图形笔刷。1SolidBrush类所属命名空间:System.Drawing作用:用来定义实色填充图形笔刷。使用方法示例:Dim br As New SolidBrush(Color.Red) Dim rec As New Rectangle(1,1,100,100) e.Graphics.FillRectangle(br,rect) 除了自定义笔刷外,还可以像命名钢笔一样使用使笔刷,上述代码可以写成:Dim rec As New Rectangle(1,1,100,100) e.Graphics.FillRectangle(Brushes.Red,rect),2HatchBrush类所属命名空间:System.Drawing.Drawing2D作用:用来定义有填充图案和背景的笔刷。使用方法示例:Dim hatbr As New Drawing2D.HatchBrush _ (Drawing2D.HatchStyle.Cross, _ Color.Black, Color.Red) Dim rec As New Rectangle(1,1,100,100) e.Graphics.FillRectangle(hatbr,rect),3LinearGradientBrush类所属命名空间:System.Drawing.Drawing2D作用:用来定义线性渐变色笔刷。使用方法示例:Dim rec As New Rectangle(1, 1, 100, 100)Dim lgBr As New _ System.Drawing.Drawing2D.LinearGradientBrush(rec, _ Color.Red, Color.Yellow, _ Drawing2D.LinearGradientMode.ForwardDiagonal)Me.CreateGraphics.FillRectangle(lgBr, rec),4TextureBrush类所属命名空间:System.Drawing作用:用来定义带图形的笔刷。 使用方法示例:Dim myImage As Image = _ Image.FromFile(E:photopen.ico)Dim tBr As New TextureBrush(myImage, _ Drawing2D.WrapMode.TileFlipX)Dim rec As New Rectangle(1, 1, 100, 100)Me.CreateGraphics.FillRectangle(tBr, rec),三、Pen类 所属命名空间:System.Drawing 作用:定义线条或一个封闭区域边框的颜色和宽度,常用于绘制封闭图形的轮廓。 使用方法示例: Dim mypen1 As New Pen(Color.Red) Dim mypen2 As New Pen(Color.Gray,3) 还可用预定义钢笔来创建钢笔对象,示例代码如下: Dim mypen As Pen = Pens.Yellow,使用方法示例:Dim myPen As New Pen(Color.Red, 5)Me.CreateGraphics.DrawEllipse(myPen, 20, _ 20, 100, 100),四、Grapics类所属命名空间:System.Drawing作用:用以绘制图形和文本。VB.NET图形处理包括绘直线、多边形、圆等多种几何图菜。同时,还包括以特殊字体显示文本的能力。所有这些功能均在Grapics类的子类中处理。如要在窗体中添加图形,则需要实例化一个窗体Graphics类的对象;如要在图片上绘制图形,则需要实例化一个图片的Graphics类对象。示例代码如下:,定义绘制区域 Dim r As New Rectangle(New Point(0, 0), _ New Size(50, 50) 定义不同的Graphics类对象 Dim gr1 As Graphics = Me.CreateGraphics Dim gr2 As Graphics = _ PictureBox1.CreateGraphics 绘制图形 gr1.FillRectangle(Brushes.Red, r) gr2.FillRectangle(Brushes.Green, r),1. 常用属性SmoothingMode属性:获取或设置此Graphics的呈现质量。 TextRenderingHint属性:获取或设置与此Graphics关联的文本的呈现模式。2.常用方法 DrawRectangle方法:绘制由坐标对、宽度和高度指定的矩形。 DrawString方法:在指定位置并且用指定的Brush和Font对象绘制指定的文本字符串。 FillRectangle方法:填充由一对坐标、一个宽度和一个高度指定的矩形的内部。 FillPath方法:填充GraphicsPath的内部。注:还有其它一些常用方法如FillPie,FillEllipse等见教材。,3VB.NET的图形处理VB.NET处理图形一般包括两个步骤:(1)创建Graphics对象。可以通过具备创建Graphics对象能力的对象中的CreateGraphics方法创建Graphics对象。(2)利用创建的Graphics对象下的方法绘制线条和形状、呈现文本或显示与操作图像。值得注意的是,图形是在创建该Graphics对象的对象中进行绘制。,例分别在当前窗体上绘制红色实心正方形,在PictureBox1控件中绘制绿色实心正方形。正方形左上角均为(0,0),宽为50。, 定义不同的Graphics对象 (gr1是由窗体创建,gr2由PictureBox1创建)Dim gr1 As Graphics = Me.CreateGraphics Dim gr2 As Graphics = PictureBox1.CreateGraphics 定义绘制的矩形区域Dim r As New Rectangle(New Point(0, 0), New Size(50, 50) 绘制图形gr1.FillRectangle(Brushes.Red, r)gr2.FillRectangle(Brushes.Green, r),上机实践,1. 在窗体上绘制如下外观形式文本,2. 制作窗体,要求该窗体运行时界面如下。(矩形是在Panel控件中绘制),五、GraphicsPath类所属命名空间:System.Drawing.Drawing2D作用:表示一系列相互连接的直线和曲线。利用该类结合Graphics下的FillPath方法可以绘制自定义图形。,常用方法:StartFigure:不闭合当前图形即开始一个新图形。后面添加到该路径的所有点都被添加到此新图形中。 AddLine:向当前路径追加一条线段。 AddArc:向当前路径追加一段椭圆弧。 AddString:向此路径添加文本字符串。 AddPath:将指定的GraphicsPath追加到该路径。 CloseFigure:闭合当前图形并开始新的图形。如果当前图形包含一系列相互连接的直线和曲线,该方法通过连接一条从终结点到起始点的直线,闭合该环回。注:还有其它一些常用方法如AddPie,AddEllipse等请自学。,Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _ System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim gp As Graphics = e.Graphics gp.SmoothingMode = SmoothingMode.AntiAlias Dim gpath As New GraphicsPath With gpath .StartFigure() .AddLine(10, 20, 30, 50) .AddArc(100, 30, 100, 60, 30, 110) .AddLine(80, 100, 20, 80) .CloseFigure() End With gp.DrawPath(New Pen(Color.Blue, 3), gpath) gp.FillPath(Brushes.Yellow, gpath)End Sub,使用示例:分析如下代码,并说明执行结果,六、应用实例【例1-1】编写程序,要求在窗体上绘制如图所示图形。三个图形宽度和高度均为120和60,从左至右三个图形左上角坐标分别为(30,10)、(155,10)、(280,10)。第1个图形为直角矩形,后两个图形为导角矩形。第一个矩形填充色为红色,第二个为由红到100透明分量的白水平渐变,第三个为背景由红到100透明分量白水平渐变,图案是黑色线条水平砖。(制作过程略,分析过程见后述内容),问题分析:如何绘制导角矩形?.NET没有提供导角矩形的绘制方法,可以利用GraphicsPath路径对象来解决。具体做法:将该矩形四个直角的导角弧依顺序添加到事先创建好的GraphicsPath对象中,封闭该路径对象后利用Graphics类的FillPath(填充路径)方法和DrawPath(绘制路径)方法对该导角路径对象进行填充和描边便可得到图中导角矩形。,获取导角弧的分析过程如下图所示,上机实践,按图1和图2在窗体上绘制图形(提示:ASCII码为128的字符以“Webdings”字体显示时为人形字符),图1,图2,【任务3:面向对象编程】,一、面向对象的术语1抽象、封装、继承和多态(1)抽象和抽象数据类型(2)封装性(3)继承性(4)多态性,【任务3 子任务1:类的创建与使用】,2对象、类和实例对象:将现实世界中的实体或关系抽象化后形成的基于代码的概念。如用Player对象来表示现实世界中的游戏玩家,或用File来表示计算机硬盘上某个要处理的文件。类:指定义对象的代码。如要用一个Player对象表示一个游戏玩家,首先必须定义Player类,它应包含创建Player对象所必须的代码。,对象是基于某个类创建的,每个对象就是该类的一个实例。,3对象的组成对象的主要组成元素有接口、实现或行为、成员变量或实例变量。(1)接口接口是对象提供给外界访问其内部数据或行为的重要途径。一般指其内部用Public声明的一组方法(Sub或Function过程)、属性(Property过程)、事件和字段(变量)。理论上还可用其它关键字定义属性和方法:Private、Friend、Protected进行定义。,(2)实现或行为方法内的代码称为实现(或称行为)。例如,设计某个类时定义了Days属性作为对象接口的一部分,该方法的实现如下:Private _Days As IntegerPrivate Property Days() As Integer Get Return _Days End Get Set(ByVal value As Integer) _Days = value End SetEnd Property,注:我们可以不改变接口本身就能有效地改变它的行为方式。,(3)成员变量或实例变量成员变量一般指在类内部用Private声明的局部变量。如该成员变量是用来保存类中属性的值,则又称为实例变量。,二、使用对象使用对象前必须对其进行声明和实例化。1对象的声明和实例化常见方法有两种。法一:对象声明和实例化分开进行Dim 对象名 As 类名 对象名= New 类名法二:对象声明和实例化在同一条语句中完成Dim 对象名 As New 类名,【例1-2】用代码的方法使窗体在加载时自动添加一个文本框控件,并要求该文本框在窗体的正中间,背景色为粉红色,其上有焦点。(提示:窗体的文本框控件是系统类TextBox 的一个实例化对象)界面设计及代码编写:略,如希望声明的对象可以使用事件要在通用声明段声明带事件的对象。代码如下:Dim WithEvents t As TextBox这样,对象t就可以使用文本框的所有事件了。,2对象的引用类的实例化对象均是采用引用方式。例如:Dim t As New TextBox Dim b As TextBox b = t执行上述代码后, t和b均指向同一个对象的引用。即:t和b实际上是同一个对象。,分析:执行下述代码后t和b的BackColor属性值?3取消对象的引用处理完对象后,应取消对象的引用来表明对该对象的使用已完毕。语法格式为: 对象名=Nothing,Dim t As New TextBox Dim b As TextBox b = t t.BackColor = Color.Coral b.BackColor = Color.Red,执行代码后,t和b的BackColor属性值均为Color.Red。,三、类的创建使用对象前必须先创建类。1创建基类(1)Class基本语法Public Class 类名称 定义该类的变量、方法、属性和事件的相关代码End Class,.NET环境下,类可以在窗体文件、模块文件或类文件中创建。,【例1-3】创建一个表示员工的类Employee类。在窗体文件、模块文件或类文件中输入如下代码:Public Class Employee 定义该类的变量、方法、属性和事件的相关代码End Class,(2)声明成员变量声明成员变量作用是存放类的内部数据,要在Class结构内部声明。【例1-4】创建Employee类,并添加两个成员变量_Name和_BirthDate。代码如下:Public Class Employee Private _Name As String Private _BirthDate As DateEnd Class,注:虽然成员变量前的关键字可以很多种,但一般使用Private。,(3)声明属性属性是专门为设置和获取数据而设计的方法,写在Class结构内部。简单格式Public Property 属性名() As 数据类型 Get 语句块 End Get Set(ByVal Value As 数据类型) 语句块 End Set End Property,类型要一致,Set.End Set语句块:在用户为该属性赋值时自动执行,Value用以返回用户设置的值。一般情况下,此语句块中应包含获取用户输入值的语句。 GetEnd Get语句块:在用户读取该属性值时自动执行。一般情况下,此语句块中应包含“Return 表达式”或“属性名=表达式”语句,用以返回属性值。,【例1-5】创建Employee类,并添加Name和BirthDate属性。代码如下:,Public Class Employee Private _Name As String 成员变量_Name,用以存放姓名 Private _BirthDate As Date 成员变量_BirthDate,用以存放出生日期 定义Name属性 定义BirthDate属性 End Class, 定义Name属性Public Property Name() As String Get Return _Name 返回属性值 End Get Set(ByVal value As String) 获取用户设置的数据Value _Name = value End SetEnd Property, 定义BirthDate属性Public Property BirthDate() As Date Get Return _BirthDate 返回属性值 End Get Set(ByVal value As Date) 获取用户设置的数据 _BirthDate = Value End SetEnd Property,声明只读属性Public ReadOnly Property 属性名() As 数据类型 Get 语句块 End GetEnd Property,说明:带上关键字ReadOnly的属性定义只有GetEnd Get语句块。用户不能对只读属性赋值,但可以读取该属性值。,【例1-6】为上述Employee类添加表明年龄的属性Age。(1)分析由于年龄Age的值可以通过_BirthDate属性得到,不必用户输入,可以声明为只读。(2)代码设计,Public Class Employee 声明成员变量_Name和_BirthDate 定义Name属性 定义BirthDate属性 定义只读属性Age End Class, 声明只读属性AgePublic ReadOnly Property Age() As IntegerGet Return DateDiff(DateInterval.Year, _ _BirthDate, Today)End GetEnd Property,声明只写属性Public WriteOnly Property 属性名() As 数据类型 Set(ByVal value As 数据类型) 语句块 End SetEnd Property,说 明 带上关键字WriteOnly的属性定义表明是只写属性,此时只有SetEnd Set语句块。用户可以对只写属性赋值,但不能读取该属性值。 关键字ReadOnly和WriteOnly不能同时出现在定义属性的语句中。,【例1-7】为上述Employee类添加表明其工资等级的属性Level。(1)分析工资等级Level是计算工资的依据,要事先输入。之后用户只需知道工资金额,无需了解工资等级,所以此属性可以声明为只写。(2)代码设计第一步,在上述Employee类中定义成员变量_Level,代码如下。 存放从外界输入的工资等级Private _Level As Integer,第二步,声明Level属性(只写),代码如下。 声明只写属性LevelPublic WriteOnly Property Level() As Integer Set(ByVal value As Integer) _Level = value End SetEnd Property,扩展:声明Level属性后,便可声明只读属性Salary(基本工资),代码如下:, 声明只读属性Salary(基本工资)Public ReadOnly Property Salary() As Single Get Select Case _Level Case 1 Salary = 4500 Case 2 Salary = 4300 Case 3 Salary = 4100 Case 4 Salary = 3800 Case 5 Salary = 3600 Case 6 Salary = 3400 Case Else Salary = 0 End Select End GetEnd Property,声明带参属性 定义的属性名后括号中带上参数,即表明此属性是带参属性。一般格式如下:Public ReadOnly|WriteOnly Property 属性名(ByVal 参数列表) _ As 数据类型 Get 语句块 End Get Set(ByVal Value As 数据类型) 语句块 End Set End Property,说 明 定义带参属性时,参数列表的写法与定义带参过程写法类似,但只能是传值方式。 在设置或获取带参属性值时,要给出实参。 如果带上关键字ReadOnly,则实现代码只能写Get语句块;如果带上关键字WriteOnly,则实现代码只能写Set语句块。,【例1-8】为上述Employee类添加联系电话Phone属性,要求可以存放多个号码。(1)分析联系电话可以有多种,例如,办公电话、家庭电话、手机等。因此,设置联系电话Phone属性时,应该可以存放多个联系电话。为了解决这个问题,可以将此属性声明为带参属性,而在类的内部用一个哈希表(Hashtable)对象存放不同类型的联系电话。,补充:哈希表(Hashtable)类 所在命名空间: System.Collections 作用:是一个集合类,实现由键(Key)组织的值的集合。其下有Add、Remove等方法对其下成员进行添加、移除等操作;可以通过其下ContainsKey方法判断某个键是否存在;通过Keys得到所有键的集合;通过Item(键名)得到某个键的值。 例如,,Dim _Phone As New Hashtable, str As String 为_Phone对象添加三对键值Phone.Add(办公电话, Phone.Add(家庭电话,Phone.Add(手机, 遍历_Phone所有的键值,并显示出来For Each s As Object In _Phone.Keys str &= s & : & _Phone.Item(s) & vbCrL NextMsgBox(str),(2)代码设计根据上述分析,添加Phone属性代码设计如下。第一步,在上述Employee类中定义成员变量 _Phone ,代码如下。_Phone为Hashtable对象,其中可以存放多对键值Private _Phone As New Hashtable 第二步,声明带参属性Phone。(代码略),【例1-9】整理例1-5至例1-8代码得到创建Employee类的完整代码,并应用该类。(1)整理Employee类代码(代码略)(2)Employee类的应用窗体设计和运行界面如下图所示,代码略。,声明缺省属性缺省属性必须是带参属性,此时应在定义带参属性的语句最前面写上关键字Default。一个类中只能有一个缺省属性。引用缺省属性时,无需写属性名。,例将例1-7中的带参属性Phone改为缺省属性,代码如下: 将带参属性Phone改为缺省属性Default Public Property Phone(ByVal type As String) As String Get Return _Phone.Item(type) End Get Set(ByVal value As String) If _Phone.ContainsKey(type) = False Then _ Phone.Add(type, value) Else _Phone.Item(type) = value End If End SetEnd Property,之后,代码窗口中p.Phone(家庭电话)均可写成p (家庭电话),p.Phone(办公电话)均可以写成p (办公电话) 。,(4)声明方法方法是类中编写的子过程或函数过程。其在Class结构内部声明,可以使用多种关键字,只有Public及Friend关键字的方法才能成为接口,与外界通信。方法的引用类似于属性的引用。【例1-10】为例1-9的Employee类声明方法GetPhones返回所有的联系电话,声明方法ClearPhones清除所有联系电话。(代码略),(5)类中添加事件及事件的使用类中添加事件先在类中用Public Event声明,然后在类的某个方法中用RaiseEvent进行激发。声明语法格式:Public Event 事件名()激发的语法格式:RaiseEvent 事件名(),【例1-11】为例1-10的Employee类声明ErrorLevel事件,要求当工资等级值不为1-9时激发。第一步,在例1-10的定义成员变量代码段后声明要添加的事件。 声明事件ErrorLevel:工资等级输入错误事件Public Event ErrorLevel()第二步,改写例1-10的定义Level属性代码,在其中激发ErrorLevel事件,具体如下:, 改写属性Level的声明方法Public WriteOnly Property Level() As Integer Set(ByVal value As Integer) If value = 10 Then RaiseEvent ErrorLevel() 当输入工资等级值不为1-9时激发 ErrorLevel事件 Else _Level = value End If End SetEnd Property,使用类的事件如类的实例需要使用定义的事件,则定义该实例对象时必须带关键字WithEvents,且必须是模块级及以上级别的。另,事件的具体处理代码由用户编写。,【例1-12】使用例1-10中定义的ErrorLevel事件。第一步,在通用声明段中定义带事件的Employee对象p。 Employee类实例化对象名为p,使用类中事件Dim WithEvents p As New Employee 第二步,在代码窗口左边的下拉列表框选择对象p,右边选择事件ErrorLevel,窗体显示在类中定义的ErrorLevel事件格式,具体如下:Private Sub p_ErrorLevel() Handles p.ErrorLevelEnd Sub第三步,在上述事件中添加如下代码:(由用户自己根据实际情况编写代码),2类的高级概念(1)重载方法又称类的重载,是指可以在一个类中多次声明同名的方法,但这些方法的签名不同(签名不同:指方法的参数个数不同或者参数类型不同)。,在引用重载方法时,系统会自动根据提供实参个数不同、类型不同而选择对应的重载方法。,【例1-13】创建Windows应用程序项目文件,添加名为walker.vb类文件,按下述语句设计walker类在.NET环境下是被允许的。,Public Class walker Private _name As String 声明name属性 Property name() As String Get Return name End Get Set(ByVal value As String) _name = value End Set End Property 声明5种walk方法(分别为:不带参数、带一个整型参数、 带一个单精度参数、带两个整型参数 带一个整型参数和一个单精度参数) End Class, 声明walk方法:不带参数Public Sub walk() MsgBox(_name & 正在走路!)End Sub, 声明重载walk方法:带一个整型参数Public Sub walk(ByVal distance As Integer) MsgBox(_name & 走了 & distance & 米!)End Sub, 声明重载walk方法:带一个单精度参数Public Sub walk(ByVal distance As Single) MsgBox(_name & 走了 & Math.Round(distance, 2) & 米!)End Sub, 声明重载walk方法:带两个整型参数Public Sub walk(ByVal x As Integer, ByVal y As Integer) MsgBox(String.Format(0所在的位置:(1,2), _name, x, y)End Sub, 声明重载walk方法:带一个整型参数和一个单精度参数Public Sub walk(ByVal x As Integer, ByVal y As Single) MsgBox(String.Format(0所在的位置:(1,2), _name, _ x, Math.Round(y, 2)End Sub,编写窗体单击事件代码如下:按F5运行程序,依次显示如下图所示消息框。,Private Sub Form1_Click(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles Me.Click Dim p As New walker = 方芳 p.walk() : p.walk(1200.568!) : p.walk(500, 9087.987!)End Sub,(2)重载构造函数构造函数是类进行实例化必须执行的方法, 通常用它来初始化类的对象。VB.NET构造函数是Sub New,其方法名固定为New,不可更改。VB.NET提供默认的无参构造函数New来实例化类,构造函数New可以重载。构造函数New有如下特点:自定义类中没有声明构造函数,VB.NET提供默认的无参构造函数;声明了构造函数,则不再提供默认的构造函数,此时如果需要无参的构造函数,必须声明。构造函数不能继承。,例在例1-13的walker类中添加如下两个构造函数。 无参构造函数New:设置变量_name的默认值为字符串“Null”Sub New() _name = NULLEnd Sub 带参New:初始化时接收用户参数,并将该参数值赋给变量_nameSub New(ByVal yourName As String) _name = yourNameEnd Sub,之后将例1-13窗体单击事件代码改写如下:Private Sub Form1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Click Dim p As New walker p.walk() p.walk(1200.568!) p.walk(500, 9087.987!) End Sub,问题:分析上述代码执行结果,并与之前结果比较,说明为什么?,之后将例1-13窗体单击事件代码改写如下:Private Sub Form1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Click Dim p As New walker (刘小春) p.walk() p.walk(1200.568!) p.walk(500, 9087.987!)End Sub,问题:分析上述代码执行结果,并与之前结果比较,说明为什么?,(3)共享变量和方法共享变量和方法是属于类的所有实例化对象的变量和方法,直接通过类进行引用,无需对类进行实例化。声明共享变量和方法语法格式:Public | Private Shared 共享变量或方法名公共共享成员的引用格式:类名.共享变量或方法名,声明共享变量和方法格式说明 Shared只能在类的通用声明段中使用,其声明的变量、方法和事件可以认为是被类的所有实例对象共享的静态成员。 Public Shared表示是公共共享成员,Private Shared关键字表示是私有共享成员。 共享变量和方法可以在类及其派生类的实例之间共享。,【例1-14】创建Windows应用程序项目文件,要求设计一个名为car类,并使用。窗体设计如下图所示,单击“实例化car类”10次后单击“显示car类实例化对象个数”按钮显示如下图所示消息框。,(1)界面设计如上图所示。(2)car类的代码设计Public Class car 共享变量count(在该类的所有对象间共享) Shared count As Integer Private _wheels As Integer Private _aColor As Color 轮子个数属性wheels Public Property wheels() As Integer Get Return _wheels End Get Set(ByVal value As Integer) _wheels = value End Set End Property, 外观颜色属性aColor Public Property aColor() As Color Get Return _aColor End Get Set(ByVal value As Color) _aColor = value End Set End Property 共享方法information:显示目前car类的实例化对象个数 (无需实例化,直接使用) Shared Sub information() MsgBox(本程序共有 & count & _ 个car类的实例化对象, , car类的information共享方法) End Sub Sub New() count += 1 构造函数New:实现每实例化一个对象,count递加1 End SubEnd Class,(3)窗体代码设计 “实例化car类”按钮的Click事件Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 实例化car类(根据设计每实例化一次其共享成员count递加1) Dim p As New carEnd Sub “显示car类实例化对象个数”按钮的Click事件Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click information是公共的共享方法可以通过类名直接引用 rmation() End Sub,上机实践,1. 自定义矩形类并使用。自定义矩形类要求具有如下属性和方法:左上角X坐标的属性和Y坐标的属性。宽度和高度的属性。三种构造方法。绘制空心矩形绘制空心导角矩形绘制实心矩形的方法。绘制实心导角矩形的方法。,2. 定义一个三角形类,具有三条边的属性及计算面积和周长的方法,使用该类计算已知三角形的面积和周长。要求: 类中面积有两种计算方法,如下:法一:S=底高2法二: 当给出参数无法构成三角形时,给出错误提示。, 接收用户输入的文本框中只能接收数字字符、小数点、退格键及回车键。(退格键Ascii码为8,回车键Ascii码为13)程序设计参考界面如下图所示。,四、类的继承继承是指从父类派生出子类的过程。特点如下:(1)子类自动拥有父类的所有属性、方法和事件。(2)子类可以根据需要添加自己的新属性、方法和事件,也可以重写父类的属性和方法。(3)VB.NET中不允许多重继承,默认状态下任何类都可以被继承。(4)父类实例化对象可以引用其子类实例化对象,但子类实例化对象不能引用父类实例化对象。(5)如果希望所创建的类不能被继承,则在定义类时使用关键字NotInheritable即可。,【任务3 子任务2:类的继承】,例如,如下所示的animal类不能被继承。Public NotInheritable Class animalEnd Class,1创建子类 在Class语句下写上如下语句:Inherits 分析:假设worker类是person类的子类,下述两段代码是否正确?Dim w As New worker Dim w As New workerDim p As New person Dim p As New personp = w w = p,【例1-15】创建person类,其中含人类所共有的信息:姓名和出生年月属性。之后以person类为父类创建子类worker,要求worker类中增加工种workType和工资salary属性。(代码略),2重载父类的属性和方法在子类中使用Overloads关键字可以重载父类中的属性和方法,重载并不影响子类使用父类中原属性和方法。【例1-16】修改例1-15的子类worker中,要求增加“曾

温馨提示

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

最新文档

评论

0/150

提交评论