Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础.ppt

上传人:小****库 文档编号:3375301 上传时间:2020-08-18 格式:PPT 页数:72 大小:2.33MB
返回 下载 相关 举报
Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础.ppt_第1页
第1页 / 共72页
Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础.ppt_第2页
第2页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础.ppt》由会员分享,可在线阅读,更多相关《Visual Basic.NET程序设计课件 第6章 面向对象程序设计基础.ppt(72页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第6章 面向对象程序设计基础,6.1 基本概念 6.2 类和对象的定义 6.3 构造函数和析构函数 6.4 继承与派生 6.5 类的多态性 6.6 命名空间,面向对象程序设计是一种先进的程序设计方法,它把数据和对数据的处理封装在一起。 具体地说,它采用数据抽象和信息隐藏技术将需处理的数据对象和对数据对象的操作抽象成类。 程序设计人员可以利用类和对象编程来简化程序的设计,提高程序代码的可重用性,减少编程的工作量。 VB.NET是一种面向对象程序设计语言,它具有面向对象编程语言的三个基本特性:封装性、继承性和多态性。 本章介绍类、对象、继承、多态等面向对象程序设计中的基础知识以及VB.NET面向对

2、象程序设计的实现方法。,6.1 基本概念,在这一节中要介绍 类、对象、属性、事件和方法等基本概念。,6.1.1 类和对象,在现实社会中,通常把具有相同特征和性质的事物抽象出来构成一类。 例如,人、动物、房子、书和笔等都是“类”,它们具有不同的特征。 当这些“类”特指某一事物时,其特征必须有实际的值。这些实际的值就对应一个对象。 例如,某一个人:姓名张三,性别男,年龄18岁,民族汉族等,这就是人这个“类”的一个“对象”。 面向对象程序设计方法使用这种自然的逻辑思维来组织程序,把数据定义和对数据的操作定义为“类”,通过创建类的“对象”来使用类,达到信息封装和代码重用的目的,为实现大型复杂软件提供了

3、有效的技术。,.NET框架提供了功能强大的类库。 例如,在Windows应用程序中用于设计图形界面的控件类库,在该类库中定义了各种常用控件类。 窗体、按钮、文本框、图像框、列表框等都是在该类库中定义的控件类。 这些类以可视化的形式显示在工具箱中,当用户使用工具箱在界面上建立一个有名字、大小、颜色和位置等具体值的控件时,它就成为具体的控件对象。 事实上,可以在界面建立很多个名字、大小、位置和颜色各不相同的控件对象。 VB.NET除了可以使用框架类库中的类来设计程序外,还可以用面向对象的方法设计用户使用的类。,6.1.2 属性、事件和方法,对象可以看作是具有特殊属性和行为的一个可视化实体,每个对象

4、都有自己的数据成员、属性、事件和方法。 用来描述对象的性质和特征的信息称为数据成员或属性。 例如,描述圆的大小用Radius(半径)数据成员来实现。 又如,描述按钮的大小用 Width(宽)和Height(高)属性,描述按钮的位置用Left(左坐标)和Top(顶坐标)属性,描述按钮是否可见用Visible属性。,一般来说,每个对象都可以接收不同的事件,并能对这些事件做出响应。 事件是由VB.NET系统预先设置或者在程序中由程序员设计的,是能够被对象识别的动作。 例如,窗体有Load(装载)事件,按钮有click(单击)事件,文本框有TextChanged(文本改变)事件等。,方法是指类本身内含

5、的一些特殊过程。 使用这些内部自带的过程可以实现特定的功能。 例如,Console类有Write方法和WriteLine方法,调用它们可以输出数据。 又如,窗体类有Show方法,用于加载并显示窗体。 再如,在用户自定义的圆类中可以定义一个方法用于求圆的面积。,6.2 类和对象的定义,从形式上看,类是从结构演变而来的。但结构中只能包含数据成员,不能包含属性、事件和方法,而类中既可以包含数据成员,也可以包含属性、事件和方法。 也就是说,类将数据与属性、事件和方法封装在一起,组成一个不可分割的整体。 这就是面向对象程序设计封装性的基本技术。 类的成员包括数据成员、属性、事件和方法。,6.2.1 类的

6、定义,1类定义语句,一般格式: Class End Class 说明: Class是定义类的关键字。是用户自定义的标识符,用来标识类的名字。 为关键字Private、Protected或Public等,用来指定类或成员的不同访问特性,或者说不同的作用域。,Public用于声明公有成员。公有成员是类的接口,在类中和类外都可访问。 Protected用于声明保护成员。保护成员在类中及其派生类中都可访问。 Private用于声明私有成员。私有成员只能在类中访问,不能在类外访问。 省略时默认为Public,表示该类是全局的,在程序的任何地方都可以使用。 数据成员通常声明为Private,供类外部使用的

7、属性、事件和方法必须声明为Public。,例6-1,定义一个日期类。,Class D Private month As Integer Private day As Integer Private year As Integer Public Sub SetDate(ByVal m%, ByVal d%, ByVal y%) month = m : day = d : year = y End Sub Public Function IsLeapYear() Return (year Mod 4 = 0 And year Mod 100 0) Or _ (year Mod 400 = 0) E

8、nd Function Public Sub PrintDate() WriteLine(0, year 公有IsLeapYear函数过程用于判断给定日期所属年份是否为闰年; 公有PrintDate子过程用于输出日期。,2类定义的位置,在VB.NET中,类定义的程序代码从语法上来说可以设置在程序的不同地方。 归纳起来有如下常见的定义位置。,(1)在标准模块中定义类或与标准模块并列定义类。 例如,程序段: Module Module1 Class D End Class End Module 将D类定义在标准模块中。 又如,程序段: Class D End Class Module Module

9、1 End Module 将D类定义与标准模块并列。,(2)在窗体类中定义类或在窗体的代码窗口中与窗体类并列定义类。 例如,程序段: Public Class Form1 Class D End Class End Sub 把D类定义在窗体类中。 又如,程序段: Class D End Class Public Class Form1 End Sub 把D类和窗体类并列定义。,与变量定义一样,不论类定义在什么位置,都要遵从先定义后使用的原则。如果违背这个原则就会出现语法错误。,6.2.2 对象的定义与访问,类是抽象的,对象是具体的。在程序中,类定义之后,就可以定义对象。 类与数据类型的性质相似

10、,它可以看作是一种数据类型。 用类定义一个对象,实际上就是定义该类的一个变量。 所以,有时把对象称为对象变量,或称为类的实例。,1对象定义语句,在定义类对象之后,才能建立数据的存储空间,调用类的方法。 定义对象语句的一般格式: Dim|Private|Public As New 其中,关键字Dim、Private和Public的含义与普通变量的含义相同。 关键字New用来创建类的实例(即分配存储空间)。类名所指的类可以为预定义类,也可以为用户自己定义的类。 功能:定义对象,并创建类的实例。 例如: Dim D1 As New D 定义对象D1,并创建类的实例,即给D1分配存储空间。 该语句实际

11、上等价如下两条语句: Dim D1 As D D1=New D,如果省略New,则只声明了属于该类的一个对象,而并未创建该类的一个实例,即不分配存储空间。 例如: Dim D1 As D D1没有存储空间 对象是该类的一个变量,每个对象占用各自的存储单元,每个对象都具有该类的所有成员。 例如,有语句: Dim Date1 As New D Dim Date2 As New D 则定义的对象Date1和Date2各自都包括数据成员month、day和year 。 也可以各自调用方法成员SetDate、IsLeapYear和PrintDate。,2对象数组,在VB.NET中,也可以定义对象数组,该

12、数组中的每一个元素都是类的对象实例,每个元素可以作为一个对象来使用。 例如,语句: Dim A(10) As New D 定义了对象数组A,数组中的每一个元素A(0) A(1) , A(10)都是类D的对象实例,都可以以对象的形式访问成员。,3对象成员的访问,当定义了某个对象后,该对象具有对该类所有成员的访问权。在程序中访问对象成员的一般形式: . 例如,对象Date1的数据成员year表示为: Date1. year 它的方法成员SetDate、IsLeapYear和PrintDate表示为: Date1. SetDate Date1. IsLeapYear Date1. PrintDate

13、 又如,数组A第i个元素A(i)的数据成员year表示为: A(i). year 它的方法成员SetDate、IsLeapYear和PrintDate表示为: A(i). SetDate A(i). IsLeapYear A(i). PrintDate,注意: 只有Public成员才能在类外被访问,而对象Date1的成员year、month和day访问特性都是Private的,在类外不能被访问。 即在类外若有以下访问形式将导致编译错误: Date1. Month Date1. day Date1. Year,例6-2,编写程序测试例6-1所定义的日期类。,Imports System.Cons

14、ole Module Module1 Class D Private month As Integer Private day As Integer Private year As Integer Public Sub SetDate(ByVal m%, ByVal d%, ByVal y%) month = m : day = d : year = y End Sub Public Function IsLeapYear() Return (year Mod 4 = 0 And year Mod 100 0) Or _ (year Mod 400 = 0) End Function Publ

15、ic Sub PrintDate() WriteLine(0, year & . & month & . & day) End Sub End Class,Sub Main() Dim D1 As New D D1.SetDate(10, 1, 1949) D1.PrintDate() WriteLine(0, D1.IsLeapYear() End Sub End Module,运行程序,6.2.3 属性的定义及其使用,类中数据成员的值一般用来表示对象的状态和特征。 为了封装和隐藏类中的数据,提高安全性的目的,类中的数据成员一般定义为Private类型。 但是,程序中有时需要访问和修改对象数

16、据成员的值,从而使对象的状态和特征发生变化。 要做到这一点,可以采用两种方法: 把类中的数据成员的访问特性定义为Public; 在类中定义若干属性,使属性与类中数据成员相关联,并将这些属性定义为Public类型,外界通过对该属性的操作即可达到间接操作相应数据成员的目的。 第一种方法的缺点是不便于实现对数据成员值范围进行限制和设定数据成员对类外只读或只写。 此时,需要用类的属性来描述对象的状态和特征。,属性定义语句的一般格式: ReadOnly|WriteOnly Property ( ) As数据类型 Get Return End Get Set( ByVal Value As 数据类型 )

17、End Set End Property 说明: 为关键字Private、Protected、Public和Friend等,用来指定访问特性。,作用:通过属性得到数据成员的值。,作用:通过属性把值赋给数据成员。, Get过程用于设置只读属性,应至少包含一个Return语句,把属性值返回给外部程序。 若省略Return语句,则Get过程将返回属性数据类型的默认值。 仅使用Get过程定义属性时,其访问特性必须为ReadOnly。 即此时属性定义语句的格式: ReadOnly Property ( ) As Get(ByVal Value As 数据类型) Return End Get End Pr

18、operty 若省略Get过程,则该属性定义为只写属性。, Set过程用来设置只写属性。在属性赋值期间,VB.NET会将参数传递给Set过程,因此过程体中应至少包含一个赋值语句,把属性的值写入数据成员。 仅使用Set过程定义属性时,必须使用访问关键字WriteOnly。此时属性定义语句的格式: 访问修饰符 WriteOnly Property 属性名(形式参数表) As 数据类型 Set = End Set End Property 若省略Set过程,则该属性定义为只读属性。,例6-3,编写程序:先定义圆类Circle,它包括一个表示半径的数据成员r、与数据成员r关联的属性x和求圆面积的方法。

19、然后测试该类定义的正确性。,Imports System.Console Module Module1 Public Class Circle Private r As Single Public Property x() As Single Get Return r End Get Set(ByVal V As Single) r = V End Set End Property Public Function Area() As Single Return 3.14159 * r * r End Function End Class,Sub Main() Dim C As New Circ

20、le Write(半径=) C.x = Val(ReadLine() Write(面积=) WriteLine(0, C.Area) End Sub End Module,WriteLine(“r=0 Area=1”, C.x, C.Area),运行程序,6.2.4 事件的定义及其触发,1事件的定义,在用户定义的类中可以定义一些事件,用于当事件触发时驱动(执行)相应的事件过程。 定义事件语句的一般格式: Event () 说明: 访问修饰符为关键字Private、Protected、Public和Friend等,用于指定事件不同的访问范围。 是事件中用来传递数据的参数。如果没有形式参数,则触发

21、事件调用事件过程时,不用进行数据的传递。,2事件处理函数(事件过程),在定义事件之后,还需要定义一个事件处理函数,以便完成 当触发事件后要做的工作。 事件处理函数语法格式: Private | Public Sub ( ) _ Handles . End Sub 其中与可以相同,也可以不同。 由一系列语句组成,这些语句用来完成事件要做的工作。,3事件的触发,事件定义后,必须被触发才会转去执行相应的事件过程。 触发事件语句的一般格式: RaiseEvent ( ) 中的参数一般为常数、常量、变量和数组等,也可以为表达式。 它们必须在数目、类型和排列次序与相应事件过程定义的中的参数一致。 事件过程

22、的执行过程与一般过程的执行过程一致。 若触发事件调用的事件过程有参数,VB系统首先进行参数传送,然后执行事件过程体中的语句。 过程体执行结束之后,返回调用该事件过程语句的下一个语句去执行。 若事件过程没有参数,VB系统直接执行事件过程体中的语句,执行之后就返回调用子过程语句的下一个语句。,4能够触发事件对象的定义,用一般方法定义的对象是不能触发事件的,只有用关键字WithEvents定义的对象才能触发事件。 用关键字WithEvents定义事件对象语句的语法格式: Dim|Private|Public WithEvents As New 功能: 定义一个能够触发事件的对象。,例6-4,首先定义

23、学生类Student,它包括3个数据成员No、Name和Score,分别表示学号、姓名和分数,也包括分别与数据成员No、Name和Score关联的属性X、Y和Z,还包括两个事件Pass和NoPass,然后编写程序测试该类定义的正确性。,Imports System.Console Module Module1 Public Class Student 说明Student类 Private No As String Private Name As String Private Score As Integer Public Property X() As String Get Return No

24、 End Get Set(ByVal V As String) No = V End Set End Property,Public Property Y() As String Get Return Name End Get Set(ByVal V As String) Name = V End Set End Property Public Property Z() As Integer Get Return Score End Get Set(ByVal V As Integer) Score = V End Set End Property,定义3个私有数据成员,只能在类中访问,不能在

25、类外访问。,也定义3个属性与3个私有数据成员对应 。,Public Event Pass() Public Event NoPass() Public Sub P() If (Score 60) Then RaiseEvent NoPass() Else RaiseEvent Pass() End If End Sub End Class WithEvents S As New Student Private Sub NoPass() Handles S.NoPass WriteLine(成绩不合格!) End Sub,Private Sub Pass() Handles S.Pass Wri

26、teLine(成绩合格!) End Sub Sub Main() Write(学号=) S.X = ReadLine() Write(姓名=) S.Y = ReadLine() Write(分数=) S.Z = Val(ReadLine() S.P() End Sub End Module,定义2个事件,定义能触发事件的对象,事件处理函数,运行程序,6.2.5 方法的定义及其调用,1在类中定义方法,在VB.NET中,类的方法是指类中定义的Sub子过程和 Function函数过程。 也就是说,方法定义在类中。 (1)类中Sub子过程定义格式 Sub ( ) End Sub (2)类中Functi

27、on函数过程定义格式 Function 方法名(形式参数表) As 数据类型 End Sub 其中访问修饰符为关键字Private、Protected、Public和Friend等,用于指定方法不同的访问特性。,2类方法的调用,与调用一般的Sub子过程和Function函数过程不同,类的方法要通过类的对象调用。 当定义了类对象后,该对象就可以调用类中定义的方法,语句格式: . ( ) 其中,调用的语法规则与一般Sub子过程和 Function函数过程相同。 例如,例6-2中的两个公有方法: SetDate和PrintDate,使用以下两个语句调用: D1.SetDate(10, 1, 1949

28、) D1.PrintDate() 而公有方法 IsLeapYear使用如下语句在表达式调用: WriteLine(0, D1.IsLeapYear(),Class D Public Sub SetDate(ByVal m%, ByVal d%, ByVal y%) month = m : day = d : year = y End Sub Public Function IsLeapYear() Return (year Mod 4 = 0 And year Mod 100 0) Or _ (year Mod 400 = 0) End Function Public Sub PrintDat

29、e() WriteLine(0, year & . & month & . & day) End Sub End Class,6.3 构造函数和析构函数,6.3.1 构造函数,1构造函数的概念和定义,在 VB.NET中,对象变量定义时也可以初始化,即可以给它的数据成员赋初值。 对象变量的初始化由一个特殊的成员函数来完成,这个成员函数称为构造函数。 定义构造函数的语法格式: Public Sub New ( ) End Sub 其中New为构造函数名,且构造函数必须以New命名。 由一系列语句构成,主要包括向数据成员赋初值的语句。 构造函数在创建对象时由系统自动调用,在程序中不能像调用普通函数那

30、样显式调用构造函数。,例6-5,构造函数的测试。,Imports System.Console Module Module1 Public Class Emp Private id_s As String Private Name_s As String Public Sub New(ByVal id As String, ByVal Name As String) id_s = id : Name_s = Name End Sub Public Sub Print() WriteLine(0, id_s & & Name_s) End Sub End Class,Sub Main() Dim

31、 emp1 As New Emp(0001, 何欣欣) emp1.Print() End Sub End Module,运行程序,2默认构造函数,VB.NET语法规定,每个类至少有一个构造函数,没有构造函数就不能创建对象。 如果在一个类中没有显式定义构造函数,则系统自动为该类生成默认构造函数。 默认构造函数的格式: Public Sub New ( ) End Sub 默认构造函数没有参数,它的函数体为空。也就是说,它仅负责创建对象,而不做任何事情。 例如,在执行语句: Dim D1 As New D 时系统就会自动调用默认构造函数,因为这个语句没有给对象变量提供实际数据进行初始化。 若类中已

32、有用户自定义的构造函数,则系统不会自动生成默认的构造函数。,对象可以被创建,也可以被销毁。当创建一个对象时,系统会为该对象分配系统资源。 当一个对象的生存周期结束时,系统会销毁该对象,回收分配给该对象的所有资源。 VB.NET为每一个类提供一个名为Finalize的析构函数,当一个对象的生存周期结束时,自动调用Finalize析构函数完成资源释放工作。 用户也可以重写Finalize析构函数,在对象生存周期结束时完成特定的工作。 例如,若在例6-5的Emp类定义中增加以下析构函数定义: Protected Overrides Sub Finalize() WriteLine(析构对象) End

33、 Sub,6.3.2 析构函数,Imports System.Console Module Module1 Public Class Emp Private id_s As String Private Name_s As String Public Sub New(ByVal id As String, ByVal Name As String) id_s = id : Name_s = Name End Sub Public Sub Print() WriteLine(0, id_s & & Name_s) End Sub Protected Overrides Sub Finalize(

34、) WriteLine(析构对象) End Sub End Class Sub Main() Dim emp1 As New Emp(0001, 何欣欣) emp1.Print() End Sub End Module,6.4 继承与派生,6.4.1 基类与派生类的概念,继承是面向对象程序设计中软件重用的关键技术。 使用继承机制可以把已经定义的类作为基础建立新的类,新的类是原有类的数据和操作以及新类所增加的数据和操作的组合。 原有类称为基类,新定义的类称为派生类。 派生类把基类作为基础类加以扩充,而不需要修改原有类的定义,即不需要修改基类的全部代码。 这种可扩充、可重用技术大大降低了软件的开发

35、和维护成本,提高软件开发的效率。 VB.NET不允许多重继承。一个派生类只能有一个基类,一个基类可以派生出多个派生类。 类的继承体系组成一种树状层次结构。,例如,植物分类的继承层次结构:,植物,6.4.2 派生类的定义,在VB.NET中,定义派生类时要使用Inherits语句来指定派生类的基类。即定义派生类的语法格式: Class Inherits End Class 其中为关键字Private、Protected或Public等。它们的作用与前面所说的一样。 定义了派生类之后,派生类继承了基类中除构造函数和析构函数外的全部成员,各成员的访问特性由其在定义时的访问修饰符来决定。,一个类定义中若

36、出现Inherits语句,说明它是派生类。 一个派生类中不能出现多个Inherits语句,即不允许多继承。 但一个派生类可以作为其他类的基类,构成多层次的类体系。,例如,汽车类Vehicle 和小车类Car的继承关系定义: Public Class Vehicle 汽车类Vehicle定义 private wheels As Integer private weight As Single End Class Public Class Car 小车类Car定义 Inherits VehicleVehicle类作为基类定义 private passengerload As Integer End

37、 Class,6.4.3 派生类的构造函数,基类的构造函数是不能被派生类继承的。所以,如果要对派生类对象初始化,则需要定义派生类的构造函数。 定义派生类的构造函数的语法形式: Public Sub New () MyBase.New() End Sub 说明: 中的参数包括派生类构造函数和基类构造函数的形式参数。 关键字MyBase用于说明当前派生类的基类。实际参数表一般要与基类构造函数定义时的形式参数表一一对应。 语句MyBase.New用来调用基类构造函数,并用实际参数表中的参数对基类的数据成员进行初始化。 由一系列语句组成,一般包括对派生类新增加数据成员初始化的语句。,例6-6,首先定义

38、点类Point,然后从Point类派生圆类Circle,输出圆心坐标并计算圆的面积。,Imports System.Console Module Module1 Public Class Point Protected x As Double Protected y As Double Public Sub New(ByVal i As Double, ByVal j As Double) x = i : y = j End Sub Public Sub PrintPoint() WriteLine(点坐标:0, x & , & y) End Sub End Class,Public Clas

39、s Circle Inherits Point说明Point类是基类 Protected r As Double Public Sub New(ByVal i As Double, ByVal j As Double, _ ByVal k As Double) MyBase.New(i, j) r = k End Sub Public Sub PrintArea() Dim Area As Double Area = 3.14159 * r * r WriteLine(圆心:0 面积:1, x & , & y, Area) End Sub End Class,Sub Main() Dim P

40、As New Point(5, 10) P.PrintPoint() Dim C As New Circle(3, 5, 10) C.PrintArea() End Sub End Module,Public Class Point Protected x As Double Protected y As Double Public Sub New(ByVal i As Double, ByVal j As Double) x = i : y = j End Sub Public Sub PrintPoint() WriteLine(点坐标:0, x & , & y) End Sub End

41、Class,Sub Main() Dim P As New Point(5, 10) P.PrintPoint() Dim C As New Circle(3, 5, 10) C.PrintArea() End Sub End Module,Public Class Circle Inherits Point说明Point类是基类 Protected r As Double Public Sub New(ByVal i As Double, ByVal j As Double, _ ByVal k As Double) MyBase.New(i, j) r = k End Sub Public

42、 Sub PrintArea() Dim Area As Double Area = 3.14159 * r * r WriteLine(圆心:0 面积:1, x & , & y, Area) End Sub End Class,运行程序,6.5 类的多态性,所谓多态是指在类层次结构中可以定义名字相同的不同方法。 在VB.NET中,可以通过在派生类中对基类方法的重写来实现多态,也可以通过对一个类中的方法或在派生类中对基类的方法进行重载来实现多态。 调用时系统根据参数或对象匹配情况选择调用同名的不同方法。,6.5.1 重写,如果派生类中的方法与基类中的方法同名而且参数表相同,则派生类中的方法将重

43、写基类中的同名方法。 在这种情况下,当在派生类中或通过派生类对象调用该方法时,调用的是派生类中的同名方法。 可以这么说,重写是对基类同名方法的功能改变或替代。 若要实现重写,须使用Overridable和Overrides两个关键字,Overridable用在基类中,Overrides用在派生类中,这两个关键字必须成对出现才能实现派生类对基类方法的重写。 在派生类中重写基类的方法时,方法名必须相同,参数的个数、类型和返回结果的类型也要一致。,例6-7,在派生类中重写基类的方法。,Imports System.Console Module Module1 Public Class B Publi

44、c Overridable Sub M() 说明该方法允许重写 WriteLine(调用基类的方法M) End Sub End Class Public Class D Inherits B Public Overrides Sub M() 重写基类方法 WriteLine(调用派生类的方法M) End Sub End Class,Sub Main() Dim A1 As New B Dim A2 As New D A1.M() A2.M() End Sub End Module,运行程序,6.5.2 重载,在派生类中重写基类的方法时,要求参数的个数和类型必须一致。 因此,在某些时候如果需要使

45、用参数个数不同或参数类型不同的同名方法来完成类似的功能,重写就不适用了。这时就要用到重载。 重载允许在一个类中或在基类和派生类中使用参数个数或类型不同的同名方法完成类似的功能。 也就是说,可以重载同一个类中的方法,也可以在派生类中重载基类中的方法。 在VB.NET中,类的方法包括类中的子过程和函数过程,即类中的子过程和函数过程都可以重载。若要实现重载,必须在声明方法时使用Overrides关键字来修饰。,例6-8,在同一个类中重载方法。,Imports System.Console Module Module1 Public Class Addion Public Overloads Sub

46、Add(ByVal x As String, ByVal y As String) WriteLine(0, x + y) End Sub 重载方法 Public Overloads Sub Add(ByVal x As Integer, ByVal y As Integer) WriteLine(0, x + y) End Sub End Class,Sub Main() Dim A As New Addion A.Add(ABC, DEF) A.Add(5, 10) End Sub End Module,运行程序,例6-9,考察圆类Circle和圆柱体类Cylinder的层次结构, 从基类Circle派生圆柱体类Cylinder。在派生类Cylinder中重载基类Circle中输出面积的方法。,Imports System.Console Module Module1 Public Class Circle Protected r As Double Public Sub New(ByVal i As Double) r = i End Sub Public Sub PrintArea() Dim Area As

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

当前位置:首页 > 技术资料 > 技术总结

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com