学习VBNET中最重要面向对象编程类与对象

上传人:dja****22 文档编号:242869150 上传时间:2024-09-10 格式:PPT 页数:45 大小:503KB
返回 下载 相关 举报
学习VBNET中最重要面向对象编程类与对象_第1页
第1页 / 共45页
学习VBNET中最重要面向对象编程类与对象_第2页
第2页 / 共45页
学习VBNET中最重要面向对象编程类与对象_第3页
第3页 / 共45页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,7,章,学习,VB.NET,中最重要的面向对象编程,类与对象,以前的,VB,版本已经有了面向对象的概念,但并不全面。真正的面向对象语言应该支持封装、继承和多态。而随着,VB.NET,的引入,,VB,已经是一个真正的成熟的面向对象的语言了。本章将讲述,VB.NET,面向对象特性中最基本的类与对象。,1,章节内容,7.1,面向对象的基本概念,7.2,在,VB.NET,中使用类,7.3,创建和使用对象,7.4,共享成员,2,7.1,面向对象的基本概念,7.1.1,对象和类,在面向对象的世界里,一切概念上的存在,小至单个整型数或字符串,大至由许多部件组成的系统,均可称作,对象,。,对象是,属性,和,行为,(,数据,和,操作,)的封装体,其中还包括和其它对象进行通信的设施,而行为通常称作,方法,。,3,类,对象按照不同的性质划分为不同的,类,。同类对象在数据和操作性质方面具有共性。,在面向对象程序设计语言中,程序由一个或多个类组成。在程序运行过程中根据需要,创建类的对象,即其,实例,。,因此类是静态概念,对象是动态概念,类是对象之上的抽象。有了类之后,对象则是类的具体化,是类的实例 。,4,7.1.2,字段、属性、方法和事件,字段,(,field,)和,属性,(,property,)都是类用于保存数据的成员。不同之处在于,字段只是类公开的简单变量,而属性可以使用属性过程控制如何设置或返回值。,5,方法,(,method,)也称作,行为,(,behavior,),指定义于某一特定类上的操作与法则,具有同类的对象只可为该类的方法所操作。,换言之,这组方法表达了该类对象的动态性质,而对于其它类的对象可能无意义甚至非法。,6,事件,(,event,)是指发生的事情。对象可以响应其外部发生的某些事件,以启动某些处理过程。,事件驱动,的应用程序是指程序的执行流程是由外部发生的事情来决定的程序。,7,7.1.3,封装,在面向对象的方法中,所有信息都存贮在对象中,即其数据及行为都,封装,在对象中。,影响对象的,唯一,方式,是执行它所从属的类的方法,即执行作用于其上的操作,这就是信息隐藏(,information hidding,)。,8,7.1.4,继承,继承,是一种使用户得以在一个类的基础上,建立新的类的技术。新的类自动继承旧类的属性和行为特征,并可具备某些附加的特征或某些限制。,新类称作旧类的,子类,,旧类称作新类的,父类,。,9,7.1.5,多态与重载,在收到消息时对象要予以响应,不同的对象收到同一消息可以产生完全不同的结果,这一现象叫做,多态,。,10,(1)重载运算符,同一运算符可用于不同的变量类型,称作运算符重载。,例如,加运算既可用来加两个整数,也可实现浮点数相加,还可以实现字符串相连,甚至可以在程序中定义复数,实现复数相加、复数和整数相加等。,在这些情况下,同样的操作对于不同的参数类型会保持运算功能的透明性。,11,(2)重载方法,同一方法可作用于不同对象上,并产生不同的结果。例如,OPEN方法既可作用于数据流,也可作用于窗口等。,12,7.2,在,VB.NET,中使用类,7.2.1,创建类,在,VB.NET,中创建类是很容易的,可以有以下,3,种方法。,作为添加到“,Windows,应用程序”项目的一个独立类模块。,作为“,Windows,应用程序”项目的某个窗体模块中代码的一部分。,作为一个独立的“类库”项目。,13,第一种方法:,创建一个用于描述员工的类,Employee,首先,我们新建一个应用程序工程,在【新建项目】窗口的【模板】列表框中选择【Windows Form窗体应用程序】,并在【名称】文本框中输入“7-1EmployeeClass”。,14,单击菜单栏中的【项目】【添加类】命令,打开【添加新项7-1EmployeeClass】窗口,并在【名称】文本框中输入“Employee.vb”。,15,单击【添加】按钮后,编译器将自动为我们生成了空类的代码。类名默认与类文件名称相同,也可以进行修改。,1 Public Class Employee,2,3 End Class,其中,,Class,关键字用于声明一个类;,Public,是该类的访问修饰语,表示该类是公共的,对类内的实体无访问限制;,Employee,是类的名称,通常选择有意义的能够说明类功能的名称。,16,第二种方法,:,在窗体模块中创建类,1 Public Class Form1,2 Form1,窗体的代码,3 End Class,4 Public Class Employee,5 Employee,类的代码,6 End Class,通过这种方式创建的类,缺点在于这些类只在创建它们的项目中可用。,17,第三种方法:创建单独的类库项目,单击菜单栏中的【文件,】【,新建项目,】命令,,在弹出的【新建项目】窗口中的【模板】列表框中选择【类库,】,模板,即可创建一个类库项目。,18,7.2.2,向类中添加属性,向类中添加属性可以采用字段或属性过程两种方式。,还可以用属性的Public、ReadOnly或WriteOnly等修饰符确定属性如何工作。,19,字段,字段只是类中的公共变量,可以从该类的外部设置或读取这些变量。,对于员工来说,可能会有在职人员和退休人员之分,可以使用一个,Boolean,类型变量来表示。,下面的代码为,Employee,类添加一个,Retired,字段,类型为,Boolean,类型,,True,表示退休,,False,表示在职。,Public Retired As Boolean,20,属性过程,属性过程有存储属性值的私有变量的声明、公开该值的Get过程以及设置该值的Set过程3个部分。,21,例子,下面的代码为,Employee,类添加,firstName,属性,用于表示员工的姓。,1 Private firstNameValue As String,2 Public Property FirstName( ) As String,3 Get,4 FirstName = firstNameValue,5 End Get,6 Set(ByVal value As String),7 firstNameValue = value,8 End Set,9 End Property,22,修改,Set,过程,检查名字是否包含数字。,Set(ByVal value As String),Dim i As Integer,Dim numContained As Boolean = False,For i = 0 To 9,If value.Contains(i.ToString( ) Then,numContained = True,Exit For,End If,Next,If numcontained = False Then,firstNameValue = value,Else,MessageBox.Show(“First name contains number!”),End If,End Set,23,只读属性,下面的代码为,Employee,类添加了一个只读属性,ID,,用于表示员工的编号。,1 Private IDValue As Integer,2,ReadOnly,Property ID( ) As Integer,3 Get,4 ID = IDValue,5 End Get,6 End Property,24,只写属性,下面的代码为,Employee,类添加了一个只写属性,Password,,用于表示员工的密码。,1 Private passwordValue As String,2,WriteOnly,Property Password( ) As String,3 Set(ByVal value As String),4 passwordValue = value,5 End Set,6 End Property,25,7.2.3,向类中添加方法,类的方法就是在该类中声明的Sub或Function过程。,例如,将员工的姓与名分开,在某些情况下比如按照姓氏排序,比较有用。但大多数时候,还需要使用员工的全名。,26,下面的代码为,Employee,类添加一个名为,FullName,的公共方法,用于返回员工的全名,它由,firstNameValue,和,lastNameValue,连接得到。,1 Public Function FullName( ) As String,2 FullName = FirstName & & LastName,3 End Function,27,下面的代码中向,Employee,类添加了一个计算年龄的私有方法,CalcAge,,并修改了只读属性,Age,的,Get,过程,以使用该私有方法。,1 Private Function CalcAge(ByVal year As Integer) As Integer,2 CalcAge = My.Computer.Clock.LocalTime.Year - year,3 End Function,4,5 ReadOnly Property Age( ) As String,6 Get,7 Age = CalcAge(birthYearValue),8 End Get,9 End Property,28,7.2.4,向类中添加事件,向类中添加事件时必须执行,以下两个步骤。,首先必须使用,Event,语句,声明事件,。,然后必须,使用,RaiseEvent,关键字,引发事件,,,引发事件是指发出发生事件的信号。,29,下面的代码声明了一个,AgeCalculated,事件。,Public Event AgeCalculated(ByVal Age As Single),下面的代码在,CalcAge,方法中引发,AgeCalculated,事件。,1 Private Function CalcAge(ByVal year As Integer) As Integer,2 Dim Age = My.Computer.Clock.LocalTime.Year - year,3 RaiseEvent AgeCalculated(Age),4 CalcAge = My.Computer.Clock.LocalTime.Year - year,5 End Function,30,7.2.5,构造函数,类的构造函数用于类的实例的创建,实现当一个类被创建时需要运行的代码。,类的构造函数,Sub new,在类实例化的时候调用,一般用于对类中某些字段或属性进行初始化,可以类定义中的任何地方创建析构函数。,31,下面的代码为,Employee,类创建了一个构造函数,用于对类内所有变量初始化。,1 Sub New( ),2 Retired = False,3 FirstName = ,4 LastName = ,5 BirthYear = 0,6 Password = ,7 End Sub,32,下面代码分别创建了使用不同参数创建类实例的构造函数。,1 Sub New(ByVal first As String,ByVal last As String),2 FirstName=first,3 LastName=last,4 End Sub,5,6 Sub New(ByVal id As Integer),7 IDValue=id,8 End Sub,在拥有多个构造函数的情况下,如何确定类的实例将调用哪个构造函数呢?这根据类实例化时传入的参数来确定。,33,7.3,创建和使用对象,对象类型如下。,内部对象,,,包括项目中的内部对象和类,。,外部对象,,,包括程序集和,COM,对象,。,7.3.1,对象类型,34,7.3.2,使用,New,关键字创建对象,New,关键字,用于创建一个类的实例。由于对象是引用类型,所以必须显式创建之后才能使用。,下面的代码声明了两个,Employee,类的对象。,1 Dim objEm1 As Employee,2 Dim objEm2 As Employee = New Employee( ),35,7.3.3,设置和获取属性,对象属性的设置和获取很简单,使用对象名,.,属性名即可完成。,例如,下面的代码为对象,objEm1,设置了,FirstName,和,LastName,属性。,1 Dim objEm1 = New Employee,2 objEm1.FirstName=Allen,3 objEm1.LastName=Smith,下面的代码则获取,objEm1,的年龄,Age,属性,并将其赋给变量,a,。,Dim a As Integer = objEm1.Age,36,7.3.4,使用方法,使用对象名,.,方法,( ),来调用对象的方法。,例如,下面的代码调用了,PictureBox1,对象的,Refresh,方法,该方法用于重新绘制图片框。,PictureBox1.Refresh( ),下面代码调用了,MessageBox,的,Show,方法,用于显示一个窗口。,MessageBox.Show(This is a message box!),37,从上面两个例子可以看到,使用方法与使用子过程或使用函数调用一样。,更具体地讲,除了需要,显式,指定将调用其方法的对象实例,从而对方法进行限定外,调用方法的方式与调用模块过程相同。,如果方法前未指定对象名,则该实例是隐式的,Me,变量。,38,7.3.5,编写对象的事件过程,首先需要在创建该对象时使用,WithEvents,关键字,。,然后,将,该事件与某个事件处理程序相关联。可以使用,Add Handler,或,Handles,语句完成关联操作。,Add Handler,语句,用于在运行时将事件与事件处理程序相关联,。,而,Handles,语句,用于在编译时将事件与事件处理程序相关联,该语句可添加到任何与事件具有相同签名的子过程的末尾。,39,下面的代码声明了另外一个类,testClass,,在该类中声明了,Employee,类的实例,newEmployee,,并编写了处理对象,newEmployee,的,AgeCalculated,事件的事件过程。,1 Class testClass,2 Dim WithEvents newEmployee As New Employee,3 Private Sub newEmployee_AgeCalculated(ByVal Age As Integer) _,4 Handles newEmployee.AgeCalculated,5 ,事件过程体代码,6 End Sub,7 End Class,40,7.4 共享成员,共享成员,是由一个类或结构的所有实例共享的属性、过程和字段。一些编程语言将这样的项称为静态成员。,VB.NET,中,共享成员使用,Shared,关键字,标识。,41,共享属性,当信息是类的一部分而非特定于类的任何实例时,共享字段和属性很有用。,当更改共享字段和属性的值时,同时更改了与该类和该类的所有实例关联的值。,42,共享方法,共享方法是不与类的特定实例相关联的类方法。例如,在Math类内定义的Cos方法是共享方法,可以将共享过程作为对象的方法调用或直接从类调用。,共享过程和属性不具有对类的实例的访问权限,因此在共享方法中只允许对非共享数据成员进行限定引用。,43,例子,1 Public Class Item,2 Public,Shared,Count As Integer = 1,3 Public,Shared,Sub ShareMethod( ),4 MsgBox(,当前,Count,的值为:, & Count),5 End Sub,6,7 Public Sub New(ByVal Name As String),8 ,使用,Count,变量的值初始化,SerialNumber,9 Me.SerialNumber = Count,10 Me.Name = Name,11 Count,变量增加,1,12 Count += 1,13 End Sub,14 Public SerialNumber As Integer,15 Public Name As String,16 Public Sub InstanceMethod( ),17 MsgBox(,该对象包含的信息为,: & _,18 Me.SerialNumber & vbTab & Me.Name),19 End Sub,20 End Class,44,注意,在使用共享成员时,不需要使用,New,关键字对类进行实例化,而是直接使用,类名,.,共享成员名,进行调用。,45,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!