1、第第3章章 Visual Basic.NET语言语言3.1 程序结构程序结构3.2 数据类型、常量和变量数据类型、常量和变量3.3 运算符和表达式运算符和表达式3.4 流程控制流程控制3.5 数组数组3.6 过程过程3.7 类和对象基本概念类和对象基本概念3.1 程序结构程序结构【例例3.1】设计如图3.1所示的显示当前时间的页面。3.1 程序结构程序结构(1)新建一个网站,命名为“WebSite3”。(2)添加一个单文件页面“Ex3-1.aspx”。(3)在此网页的源视图下输入代码,源代码。3.2 数据类型、常量和变量数据类型、常量和变量v3.2.1数据类型数据类型1.基本数据类型基本数据类
2、型(1)数值(Numeric)数据类型类类 型型数数 值值 范范 围围字节数字节数Integer-2147483648 21474836474Long9223372036854775808 92233720368547758078Short-32768 327672Single-3.402823E38 -1.401298E-451.041298E-45 3.402823E384Double-1.7976313486231E308 4.94065645841247E-3244.94065645841247E-324 1.79769313486231E3088Decimal-79228162514
3、26433759354 79228162514264337593543950335绝对值最小的非0数为:+/-0.000000000000000000000000001123.2.1数据类型数据类型(2)字节(Byte)数据类型(3)逻辑(Boolean)数据类型(4)日期(Date)数据类型(5)字符(Char)型(6)字符串(String)数据类型(7)对象(Object)数据类型3.2.1数据类型数据类型2.自定义数据类型自定义数据类型用户自定义类型在Visual Basic.NET中称为“结构”(Structure),包含一个或多个不同种类的数据类型,视自定义类型的成员来决定存放的数据
4、,关键字为System.ValueType。用户自定义类型数据占用的内存空间是其包含所有数据类型所占用内存空间的总和。3.2.2 常量常量1.直接量直接量直接量也称字面常量,是直接常量的简称,指在程序中直接以值形式出现的量。例如:123、12.8等。直接量的值直接反映了该量的数据类型,也可以在值的后面跟类型符显式地说明直接量的数据类型。以下是一些例子:123整型 123&长整型 123.8单精度浮点数(小数形式)1.26E2单精度浮点数(指数形式)690D3双精度浮点数abc,你好!字符常数 True,False逻辑常数#3-20-2003#日期常数 数值类型常量除了十进制常数外,还有八进制常
5、数和十六进制常数,分别在数值前加&O和&H表明。例如,&O23为八进制23,&H2C为十六进制2C。3.2.2 常量常量2.用户定义的符号常量用户定义的符号常量符号常量是以标识符表示的常量,其优点是易于程序维护。常量定义语法:Const 符号常量名 As 类型名=表达式定义由符号常量名指定的常量,其类型为类型名给出的数据类型,值为表达式的值。若省略As 类型名,则常量的数据类型由表达式值的数据类型确定。例如:Const PI=3.14159 省略类型名,依表达式值确定PI为Double类型Const Name As String=张华 定义一个字符串常量,值为张华Const Area=PI*5
6、*5 表达式可使用已定义过的符号常量可以在一行内定义多个常量。例如:Const PI=3.14159,Name As String=张华,Area=PI*5*53.2.2 常量常量3.系统符号常量系统符号常量系统定义的符号常量具有特定的含义,在程序中可直接引用。系统定义常量的名称常根据常量的含义采用大小写混合的命名方式,表3.2列出了一些常用的系统定义符号常量。常量名常量名值值说明说明vbCrLfChr(13)+Chr(10)回车换行符vbCrChr(13)回车符vbCrChr(10)换行符vbNewLineChr(13)+Chr(10)回车换行符vbNullCharChr(0)空字符vbNu
7、llString空字符串长度为0的字符串vbTabChr(9)Tab字符vbBackChr(8)Backspace字符3.2.3 变量变量 变量声明语法:Dim 变量名 As New 数据类型=表达式其中,As New 数据类型说明了变量的类型,若省略它,则变量为Object类型。=表达式给出变量的初始值,可以省略。例如,声明两个变量intVar和strVar:Dim intVar As Integer=10 声明一个整型变量intVar,并赋初值10 Dim strVar As String 声明一个字符串变量strVar 可以在一个Dim语句中定义多个变量。例如,声明X是长整型变量,Y是单
8、精度浮点型变量,Name是字符串型变量:Dim X As Long,Y As Single,Name As String3.3 运算符和表达式运算符和表达式v3.3.1 运算符运算符1.算术运算符算术运算符算术运算是用来进行数值计算的运算符,共有7个:+、-、*、/、Mod和。其中+、-、*分别是加法、减法和乘法运算,含义很明确。运算符:求一个数的某次方。例如23,表示求23。/运算符:两个数相除并返回一个浮点数商。运算符:两个整数进行整除并返回整数商。Mod运算符:两个数相除并返回余数。3.3.1 运算符运算符2.关系运算符关系运算符比较运算符用来比较两个表达式,结果为True(真)或Fal
9、se(假),如59为False,1810为True。常用的关系运算符如表3.3所示。运算符运算符名称名称说说 明明小于操作数可以是任何合理的表达式大于同“大于”号=大于等于 同“大于等于”号=等于同“等于”号不等于同“不等于”号3.3.1 运算符运算符(1)Is运算符Is运算符用于对象比较,要求操作数是Object类型,如果两个操作数表示同一个对象,那么返回“True”,反之则返回“False”,例如:Dim Obj1,Obj2,Obj3,Obj4 As Object Dim R As Boolean Obj2=Obj1:Obj3=Obj1:Obj3=Obj4 R=Obj1 Is Obj2 返
10、回True R=Obj1 Is Obj3 返回False3.3.1 运算符运算符(2)Like运算符Like运算符用于字符串的模式匹配。它的第一操作数要求是“String”类型,第二操作数要求是一个模式,模式中可以出现的通配符及其含义如下:“?”匹配单个字符。例如:A?,可匹配Ab、AC、AF等等。“*”匹配多个字符。例如:A*,可匹配Abc、Abcd、Array等等。“”匹配09的单个数字。例如:1#,可匹配12、13、14等等。字符列表匹配任何在列表中的字符。例如:Aa-d,可匹配Aa、Ab、Ac、Ad。!字符列表匹配任何不在列表中的字符。例如:A!a-d,可匹配Ae、Af等等。以下是使用
11、Like运算符的一些例子:Dim R As Boolean R=aBCDa Like a*a 返回True R=D Like A-Z 返回True R=b2b Like b#b 返回True R=MARY Like B?R*返回True 3.3.1 运算符运算符3.连接运算符连接运算符连接运算符用于合并两个字符串,运算符有“&”和“+”,如表3.4所示。运算符运算符名称名称说说 明明+加连接符如果两个操作数为“String”,就把这两个操作数连接成一个字符串。否则按加号处理&连接符将操作数强行转换成“String”,再进行连接运算3.3.1 运算符运算符4.逻辑运算符逻辑运算符逻辑运算符用来表
12、示逻辑运算,运算结果为逻辑值,如表3.5所示。运算符运算符名称名称说说 明明Not非Not A 表示非A,A为“True”时,结果为“False”,A为“False”时,结果为“True”And与A And B表示A与B,A、B都为“True”时结果为“True”,否则为“False”OR或A Or B表示A异或B,A、B都为“False”时,结果为“False”,否则为“True”XOR异或 A Xor B表示A异或B,A、B不相等时,结果为“True”。否则为“False”3.3.1 运算符运算符5.赋值运算符赋值运算符赋值运算符用于对变量进行赋值,表3.6列出赋值运算符。“=”为基本赋值
13、运算符,其他均为复合赋值运算符。运算符运算符名称名称说说 明明=赋值号Y=X,将X的值赋予变量Y+=加等号Y+=X,将Y+X的值赋予变量Y-=减等号Y-=X,将Y-X的值赋予变量Y*=乘等号Y*=X,将Y*X的值赋予变量Y/=浮点除等号Y/=X,将Y/X的值赋予变量Y=整除等号Y=X,将YX的值赋予变量Y=求指等号Y=X,将YX的值赋予变量Y&=连接等号Y&=X,将Y&X的值赋予变量Y3.3.2 表达式表达式运算符的优先顺序如图3.2所示。3.4 流程控制流程控制v3.4.1 分支结构分支结构1.If语句语句If语句是在编程时经常用到的语句之一,它判断条件表达式是否成立,根据条件表达式成立与否
14、来决定某些程序将要执行的语句。(1)IfThenElse语句语法语法:If 条件表达式 Then语句块1Else语句块2 End If3.4.1 分支结构分支结构语法格式中的,表示其中的内容为可选项。该If语句的执行过程为:首先判断条件表达式的真假,如果为真,则执行Then后面的语句块1;如果为假,则执行Else后面的语句块2,如图3.3(a)所示。若省略Else子句,当条件表达式的值为假,则跳过条件语句而去执行条件语句后的语句,如图3.3(b)所示。3.4.1 分支结构分支结构例如:If xy Then S=x 当xb Then Max=aElse Max=b 当a0 Then If x10
15、 Then Response.Write(x&大于10)Else Response.Write(x&是小于10的正数)End IfElse Response.Write(x&是负数)End If3.4.1 分支结构分支结构在程序设计中还经常有逐一判断条件的情况,即先判断条件1,若不成立在判断条件2,依次类推,此时可采用以下语句。逐一过滤条件的IfElseIf语句:If 条件表达式1 Then语句块1 ElseIF条件表达式2 Then 语句块2 ElseIf条件表达式n Then 语句块n Else 语句块n+1 End If3.4.1 分支结构分支结构嵌套If语句的执行过程如图3.4所示。3
16、.4.1 分支结构分支结构【例例3.2】写一个程序,判断所输入年份是否是闰年。闰年的条件是:能被4整除,但不能被100整除的年份是闰年;能被100整除,又能被400整除的年份是闰年。程序运行时,首先显示如图3.5所示的界面,当用户输入一个年份值并按下提交按钮后,将返回该年是否闰年的判断结果,如图3.6所示。3.4.1 分支结构分支结构(1)在例3.1所建网站WebSite3中新建一个单文件页面“Ex3-2.aspx”。(2)切换到“设计”视图,在此页面中插入一个2行2列的表,其中表的宽度为“300px”,背景颜色为“#CCCC00”,边框的粗细为“1px”,边框的颜色为“#000000”。(3
17、)在从工具箱中拖放1个ID为“TxtYear”的TextBox控件,1个ID为“BtnExe”,Text为“提交”的按钮控件和1个ID为“LblCaution”,Text为空值的Label控件。(4)切换到“源”视图,在标签与之间添加如下XHTML代码:请您输入一个年份,我们帮您判断是否闰年在表格的第1行第1列添加如下XHTML代码:您要检验的年份:(5)双击“提交”按钮控件,添加“提交”按钮事件代码。3.4.1 分支结构分支结构2.SelectCase语句语句SelectCase语句对一个结果的多个分支进行判断,可以用来在多个可能的情况中选择一个条件,而不再需要用大量嵌套的IfElseIfE
18、lseIf结构。语法:Select Case变量或表达式Case 值1语句块1Case 值2语句块2Case 值n语句块nCase Else语句块n+1End Select3.4.1 分支结构分支结构SelectCase语句的执行过程如图3.7所示。3.4.1 分支结构分支结构【例例3.3】考试成绩分数到等级的对应变换程序:根据输入的成绩整数值(0100)输出对应的等级,规定:90100为优秀;8089为良好;7079为中等;6069为及格;059为不及格。若输入的成绩数值不在0100之间,则提示出错。程序运行时,首先显示如图3.8所示的界面,当用户输入一个成绩值并按下提交按钮后,将返回该成绩
19、对应的等级,如图3.9所示。3.4.1 分支结构分支结构在网站WebSite3中新建一个单文件页面“Ex3-3.aspx”,页面中添加1个ID为“TxtGrade”的TextBox控件,1个ID为“Btn”,Text为“提交”的按钮控件和1个ID为“LblCaution”,Text为空值的Label控件,“提交”按钮事件代码。3.4.2 循环结构循环结构1.ForNext语句语句语法:For 循环变量=初值to终值 Step步长语句块Exit For语句块Next 循环变量3.4.2 循环结构循环结构For.Next语句的执行流程如图3.10所示。3.4.2 循环结构循环结构【例例3.4】设计
20、如图3.11所示的ASP.NET页面,在表格中分别以17号字连续变化,显示行号和“你好!”文字。3.4.2 循环结构循环结构在网站WebSite3中新建一个单文件页面“Ex3-4.aspx”,切换到“源”视图,完善代码,源代码。3.4.2 循环结构循环结构2.For EachInNext语句语句这个语句是专门为集合和数组设计的,它在格式上与ForNext语句十分相似。语法:For Each 表达式 In group 语句块 Exit For 语句块Next若表达式是集合或数组的元素,则重复执行语句块的操作。Exit For的含义与前面相同。例如:Dim Score()As Integer=80
21、,90,100,89,98 定义整型数组Score并赋初值Dim mark As Integer,Sum As Integer=0For mark In Score 求数组Score()各元素之和 Sum+=markNext3.4.2 循环结构循环结构3.Doloop语句语句其作用是:循环重复执行一组语句直到某个条件为“True”时终止循环,用于控制循环次数未知的循环结构。DoLoop语句有两种格式。语法:Do While/Until 条件表达式 语句块 Exit Do 语句块Loop DoLoop语句格式一或者:Do 语句块 Exit Do 语句块Loop While/Until 条件表达式
22、 DoLoop语句格式二3.4.2 循环结构循环结构DoLoop语句的执行流程如图3.12所示。3.4.2 循环结构循环结构【例例3.5】猜数游戏。程序的界面如图3.13所示,给定一个数字(本例为108),由用户来猜。用户在文本框中输入数字,点击“猜对了吗?”按钮。若猜中,给出成功提示;若猜错了,也给出“大于”或“小于”的提示。3.4.2 循环结构循环结构在网站WebSite3中新建一个单文件页面“Ex3-5.aspx”,页面中添加1个ID为“TxtNum”的TextBox控件,1个ID为“Btn”,Text为“猜对了吗?”的按钮控件和1个ID为“LblRes”,Text为空值的Label控件
23、,在“设计”视图下分别双击页面和按钮控件,事件代码。3.4.2 循环结构循环结构3.While循环语句循环语句While循环与Do While很相似,也是先判断条件,再执行循环体。语法:While 条件表达式 语句块 Exit While 语句块End WhileExit while为跳出循环体。3.5 数组数组v3.5.1 数组的声明及使用数组的声明及使用在使用数组前需要先对数组进行声明。语法:Dim 数组名(表达式1,表达式2)As 数据类型根据给出的表达式的个数,可声明一维数组、二维数组等,数据类型为数组元素的数据类型。其中表达式为常量。例如:Dim a1(10)As Integer 声
24、明下标从0到10的一维数组,共有11个元素Dim a2(5,4)As String 声明6行5列的二维数组,共有30个元素可以在声明数组的同时进行初始化。例如:Dim arr(4)As Integer 10,20,30,40,50上式右边称为初始化表。当初始化表中给出数组各元素值时,可省略Dim定义语句中数组的大小声明。如上面的数组声明语句等价于:Dim arr()As Integer 10,20,30,40,503.5.1 数组的声明及使用数组的声明及使用对数组中元素的引用格式为:数组名(下标1,下标2,)。例如:a1(0)=5 将5赋给数组的第一个元素i=a1(3)将数组的第4个元素赋给i
25、 以下代码利用For循环,把整数数组中的每个元素设置为它的索引值。Dim arr(5)As Integer Dim i As Integer For i=0 To 5 arr(i)=i Next3.5.1 数组的声明及使用数组的声明及使用【例例3.6】显示如图3.14所示的成绩表并求出平均成绩。设共有9名同学的成绩,分别为90、89、76、73、100、98、65、54、85。源代码所示(Ex3-6.aspx)。3.5.2 动态数组动态数组动态数组指在声明数组时未给出数组大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组的大小。其优点是可以根据用户需要,有效地利用存储空间
26、。动态数组的定义方法为:Dim 数组名()As 数据类型 声明一个尚未定义大小的数组,也可声明其数据类型未定义大小的数组是不能使用的,可用ReDim语句重新定义,给出数组大小,格式如下:ReDim Preserve 数组名(表达式)3.5.2 动态数组动态数组可用ReDim多次重新定义数组大小。但若ReDim语句中不加Preserve关键字的话,重新定义数组大小后,数组之前存放的数据就会被清除掉。如果要保留以前的数据,就要使用Preserve关键字。例如:Dim arr()As Integer 定义动态数组arrDim n As Integer=10 ReDim arr(n)重定义数组arr,
27、将其大小定义为11For i=0 To 10 arr(i)=i Next ReDim Preserve arr(20)再次定义数组arr,将其大小定义为21,保留之 前arr(0)arr(10)的值3.5.3 与数组相关的系统函数与数组相关的系统函数VB.NET提供了以下与数组相关的函数:1.IsArray(varName)若参数varName指向一个数组,返回True,否则返回False。2.LBound(arrName,arrRank)返回数组arrName指定的维arrRank的最小下标。若arrName是一维数组,则可省略维数arrRank。例如,LBound(A,1)将返回数组A第一
28、维的最小下标。若A是一维数组,则Lbound(A)将返回它的最小下标。3.UBound(arrName,arrRank)返回数组arrName指定的维arrRank的最大下标。若arrName是一维数组,则可省略维数arrRank。例如,UBound(A,1)将返回数组A第一维的最大下标。再如例3.6中的For循环语句可改写为:For i=0 To UBound(Score)3.6 过程过程v3.6.1 Sub子程序子程序1.Sub子程序定义子程序定义语法:Private|Public Sub 子程序名(参数表)语句块Exit Sub|Return语句块End Sub3.6.1 Sub子程序子
29、程序2.调用调用Sub子程序子程序调用Sub子程序有两种格式,使用Call或直接通过子程序名进行调用。语法:Call 子程序名(参数表)其中,参数表为实在参数表,参数个数和数据类型必须与形式参数表相一致。关键字Call可以省略。例如,可使用以下任一种格式对Add子程序进行调用:Call Add(10,20)Add(10,20)【例例3.7】改写例3.1,将显示当前时间的操作设计为子程序Display,再使用“Call Display”语句对其进行调用。源代码所示(Ex3-7.aspx)。3.6.2 参数传递参数传递1.按值传递参数按值传递参数按值传递参数方式在VB.NET中是缺省的,用“ByV
30、al”关键字指出参数是按值来传递的。按值传递时,首先为形参变量分配一个临时的内存单元,然后将实参的值传递到这个临时单元中。按值传递是单向的,如果过程改变了形参值,则只是影响临时单元的值,而不会影响实参变量的值。例如:Sub Inc(ByVal i As Integer)i=i+1End SubSub CallInc()Dim X As Integer=10Response.Write(X=&X)Inc(X)Response.Write(X=&X)End Sub3.6.2 参数传递参数传递2 按地址传递参数按地址传递参数【例例3.8】将两个变量的值进行交换。程序执行时显示图3.15所示的界面,在
31、上面的两个文本框中输入两个整数,点击“提交”按钮,将在下面的两个文本框中显示交换以后的值,如图3.16所示。3.6.2 参数传递参数传递在网站WebSite3中新建一个单文件页面“Ex3-8.aspx”,页面中添加2个ID分别为“TxtA1”和“TxtB1”的TextBox控件用于输入两个数,2个ID分别为“TxtA2”和“TxtB2”的TextBox控件用于显示执行交换后两个数,添加1个ID为“BtnSwap”,Text为“提交”的按钮控件,事件和过程代码如下:Sub Swap(ByRef X,ByRef Y)交换参数值 Dim Temp As Integer Temp=X X=Y Y=Te
32、mp End Sub Protected Sub BtnSwap_Click(ByVal sender As Object,ByVal e As System.EventArgs)Dim A,B As Integer A=Val(TxtA1.Text)B=Val(TxtB1.Text)Swap(A,B)TxtA2.Text=A TxtB2.Text=B End Sub3.6.2 参数传递参数传递3.可选参数可选参数参数表中含有“Optional”关键字的参数为可选的。若某参数是可选的,则参数表中该参数之后的所有参数也必须是可选的。每个可选的参数一定要有一个缺省值,并且可选参数的缺省值必须是常数
33、。下面的例子给出了带有可选参数的过程的定义:Sub ABC(Optional ByVal MyCountry As String=China)子程序体语句End Sub3.6.2 参数传递参数传递4.数组参数数组参数在定义过程时,可用数组作为参数。声明数组参数的语法格式与一般参数有区别。语法:ByVal|ByRef 形参数组名()As 数据类型例如,以下子程序求数组A各元素之和,n为数组的最大下标值:Sub SumArray(A()As Integer,n As Integer)Dim i As Integer,S As Integer=0For i=0 To nS+=A(i)NextEnd
34、Sub3.6.2 参数传递参数传递【例例3.9】显示如图3.17所示的货品表。设计一个子程序DisplayGoods,以二维数组作为输入参数,显示二维数组各元素的值;在Page_Load事件处理过程中,将货品的品名、数量和单价数据存储于一个二维数组中,将该数组作为实参传递给DisplayGoods。源代码所示(Ex3-9.aspx)。3.6.3 函数函数1.自定义函数自定义函数语法:Private|PublicFunction 函数过程名(参数表)As 数据类型 语句块 函数名=返回值 Exit Function 语句块End Function3.6.3 函数函数函数定义的语法格式与Sub子程
35、序基本相似,有三点不同:函数定义的开始和结束标志分别是Function和End Function;函数定义头部有“As 数据类型”部分,用于说明函数返回值的类型;函数中需要有返回函数值的语句,返回函数值语句有以下两种形式:函数名=表达式;Return 表达式。例如,以下程序定义了一个无参函数GetPi,它返回圆周率的值:Function GetPi()As DoubleDim Pi As Double=3.14GetPi=PiEnd Function3.6.3 函数函数2.函数调用函数调用函数的调用格式与Sub子程序相同,即在函数名之后加上实在参数表。例如,以下语句调用Area函数:TxtAr
36、ea.Text=CStr(Area(5)求半径为5的圆面积并显示以下语句都可调用GetPi函数:Dim PI As Double=GetPi()定义变量PI并调用函数为其赋初值Call GetPi()无法利用函数的返回值3.6.3 函数函数【例例3.10】显示16的16方值,如图3.18所示。源代码所示(Ex3-10.aspx)。3.6.3 函数函数3.内建函数内建函数VB.NET的内建函数非常丰富,为编程提供了极大的方便。内建函数可分为以下6类:(1)数据类型函数(2)数学函数(3)日期时间函数(4)字符串函数(5)格式化函数(6)数组处理函数3.6.3 函数函数【例例3.11】本例设计一个
37、计算离指定日期还剩余的天数与时间的程序。如图3.19所示,由用户以“#MM/DD/YYYY#”格式输入指定日期,点击“提交”后,程序将在页面上显示剩余的天数和时间。3.6.3 函数函数在网站WebSite3中新建一个单文件页面“Ex3-11.aspx”,页面中添加2个ID分别为“Txt Hours”和“TxtLeft”的TextBox控件分别用于输入指定日期和显示离设定日期还剩的时间,添加1个ID为“Btn”,Text为“提交”的按钮控件,事件和过程代码。3.7 类和对象基本概念类和对象基本概念v3.7.1 类和对象类和对象1.类类语法:Class 类名 类成员的声明End Class类的成员
38、包括属性(又称为域)和方法。以下是一个类Employee的定义:Class EmployeeDim salary As Decimal=40000Dim yearlyBonus As Decimal=4000Public Sub PrintSalary()Reponse.Write(salary)End SubEnd Class 3.7.1 类和对象类和对象2.对象对象在VB.NET中使用New语句来创建对象。语法:Dim 对象名 As 类名对象名=New 类名()上面的两条语句可简化为一条语句:Dim 对象名 As New 类名()下面的语句创建一个Employee类对象:Dim Obj A
39、s EmployeeObj=New Employee()可以简化上面的语句:Dim Obj As New Employee()语法:对象名.方法名(实参表)对象名.域名3.7.2 命名空间命名空间语法:Import 命名空间名称上述语法导入指定的命名空间,在其后使用该命名空间的方法就可以使用简略记法。Imports SystemClass EmployeeDim salary As Decimal=40000Dim yearlyBonus As Decimal=4000Public Sub PrintSalary()Reponse.Write(salary)End SubEnd Class 3
40、.7.3 访问控制访问控制所谓访问控制指的是类中成员的访问属性。VB.NET中有几个级别的访问控制,列于表3.7中。访问控制级别访问控制级别说说 明明PublicPublic类成员没有访问限制。构造public类成员是在类成员名前面使用关键字public,均可访问public成员。例如,Employee类中的PrintSalary方法是一个公有方法,能够被任何人和函数调用。PrivatePrivate类成员只能被类内部访问,使用Private关键字声明私有化类成员。Protected保护成员能被类内部成员和它的继承类访问,使用关键字Protected定义保护成员。Friend友元访问限制在声明该类的程序中,使用关键字Friend声明一个友元。P r o t e c t e d friendprotected和friend的结合。3.7.4 继承继承语法:Class 类名Inherits 基类名类成员的声明End Class上述语法声明一个由基类名所表示的类派生的新类,其中的“类成员的声明”是派生类新增加的成员,可以是属性,也可以是方法。例如:Class ManagerInherits EmployeePublic Sub PrintBonus()Reponse.Write(yearlyBonus)End SubEnd Class