VB.net基础知识
3.1 常量
3.1.1 什么是常量
在编程中,常常可以遇到变量和常量。顾名思义,变量就是值可以改变的量,常量是其值不可改变的量。
不可以改变的量有什么用呢?事实上,在实际编程中,常量用得很少。甚至可以用变量代替常量,当然这样做的代价是降低了程序的性能。
事实上,常量有很多用处。例如圆周率,如果每次需要用到的时候都把它输入一遍,效率(这里指编程效率而非执行效率)是很低的。如果把圆周率定义为一个常量,那么每次需要用到的时候,只要输入常量名就可以了。
3.1.2 关键字Const
这里首先讲解下什么是关键字。在任何一种编程语言中,都定义着那么一些关键字,这些关键字有特殊的含义,例如Function就是VB.net中的一个关键字(VB.net中不区分大小写),其功能就是定义一个函数。你不能将关键字用于你的常量、变量或者是函数的名字。其中用于定义常量的关键字是Const,Const的用法是:
Const 常量名 As 常量类型=常量值
值得一提的是,As也是关键字,它通常用于常量和变量的定义之后,用来指明所定义的类型。不过它不是必须的,省略As的情况将在后面讨论。
后面的常量值是必须的,一个常量的值必须在定义时指定,而变量的值就可以以后再指定。与此同时,指定了常量值之后,就不能再修改了。
常量名不是乱取的,首先它不能是关键字(例如不能是Function,也不能是function)。然后,它可以由阿拉伯数字、大小写字母、下划线组成,但是不可以以数字开头。
例如这个常量名是合法的:
Str123_
而这个是不合法的:
0Str123_
常量名还可以以下划线开头:
_Str123
上面讲的是常量名命名规则,是硬性规定,除此之外,还有一些约定俗成的规则。例如常量名一般都用大写等等,这些不是必须的,但是可以提高你代码的可读性。这里不作详细介绍,因为相关的命名规则太多。
常量名的命名规则就讲述到这里,现在要讲讲常量类型了。
常量类型其实和变量类型是一样的,常量类型有很多,你还可以自己定义一个类型。但是我们必须先了解常用常量类型。
3.1.3 常用常量类型
常用的常量类型有字符串、整数和浮点数,下面来一一介绍:
String:字符串,长度没有限制。
Integer:整数,其取值范围为-2147483648~2147483647。
Long:长整数,取值范围比Integer广,为-9223372036854775808~9223372036854775807。
Double:浮点数,其取值范围为-1.79769313486232E+308~1.79769313486232E+308,能精确到小数点后15位。
以上是常用的几个数据类型,请读者务必牢记。至于字符串String,我们在上一章的学习中就已经接触过,知道String的值要用双引号括起来。
3.1.4 常量的定义
了解了几个常用的数据类型之后,我们来学习常量的定义。常量的定义要用到上面讲过的Const关键字,至于定义的格式也已经介绍过了:
Const 常量名 As 常量类型=常量值
接下来我们就定义一个字符串常量,取名为HW,内容为“Hello World”。根据前面的知识,它的数据类型应该是String,而后面的常量值应该用英文双引号括起来。所以完整的定义应该是:
Const HW As String = "Hello World"
又或者,定义一个整数常量,表示一MB中的字节数:
Const MB As Integer = 1048576
再来,定义一个浮点数常量,表示圆周率的前10位:
Const PI As Double = 3.1415926535
举了3个例子,相信读者已经掌握了常量定义的规律了。
3.1.5 常量的使用
定义了一个常量之后,当时是使用了。使用一个常量很简单,只需要直接输入这个常量的名称就可以了。例如:
Const HW As String = "Hello World"
MsgBox(HW)
上面的这两行代码中,第一行定义了一个常量HW,第二行调用库函数MsgBox输出了HW包含的内容。上面这两句代码等效于下面这一句:
MsgBox("Hello World")
可见,常量的使用就是简单的输入常量的名字。通过上述例子,相信读者已经掌握了常量的使用方法,那么常量的定义及使用的介绍就到这里。接下来让我们开始学习变量。
3.2 变量
3.2.1 什么是变量
上面已经说过,变量就是其值可以改变的量。程序中用得最多的就是变量,它可以用来记录程序目前的执行状况,装载用户输入的数据等等。总之变量的用途很多,这里不一一介绍,等到实际编程中,读者自然能体会到。
3.2.2 关键字Dim
上一节中,我们介绍了定义常量的关键字Const,那么定义变量自然也有它的关键字,就是Dim了(事实上,定义变量还有很多方法,Dim只是用来定义局部变量,全局变量将在后面讨论)。Dim的用法是:
Dim 变量名 As 变量类型
Dim的用法和Const的用法几乎是一样的,不同点在于,Dim定义的变量可以不赋初始值。这就分两种情况了,一种是有初始值的:
Dim 变量名 As 变量类型=变量初始值
另一种是没有初始值的,由于变量可以在任何时候赋值,所以没有初始值是允许的。这种情况就是:
Dim 变量名 As 变量类型
变量名=变量值
上面的第二句是变量赋值。
3.2.3 布尔类型
之前介绍常量数据类型的时候,只说了整数(和长整数)、字符串和浮点数。这里引入一个新的常用类型布尔。布尔,即Boolean,在一些语言中将其缩写为bool,甚至没有布尔类型。其实布尔类型很简单,就两个取值:True和False,True表示真,False表示假。一般用来设置窗体及空间的可见性、可用性等,还可以用来作为函数的返回值表示执行的结果(一般用True表示成功,False表示失败)。其实布尔值也就是一个整数,True为1,False为0。在一些语言中,甚至直接用整数变量代替布尔。
3.2.4 变量的定义
上面已经讲到,定义变量要用关键字Dim。通过上面常量定义的学习,相信读者能看懂下面三句代码:
Dim MyName As String
Dim MyAge As Integer
Dim Succeed As Boolean
上面三行分别定义了一个字符串变量MyName、一个整数变量MyAge和一个布尔变量Succeed。
上面我们说过,在使用Dim定义局部变量的时候,有两种做法。可以只定义而不赋值,或者在定义的同时赋值,例如:
Dim Succeed As Boolean = True
这是在定义的同时赋值,还有另一种,不赋初值。
为什么要单独拿出来说呢?因为在不赋初值的时候,可以同时定义多个变量。例如:
Dim Str1, Str2 As String
这样写等效于:
Dim Str1 As String
Dim Str2 As String
也就是说,在不赋初值的时候,如果有多个相同类型的变量需要定义,则可以在同一行中定义。定义时,多个变量名之间用逗号隔开即可。常量不可以用这样的方法定义,因为常量必须赋初值。
可见变量的定义和常量的定义是差不多的,不同点在于在不赋初值的时候可以同时定义多个同样类型的变量,相信读者能理解,这里就不多作介绍了。
3.2.5 变量的使用
变量的使用跟常量的使用一样,都是直接输入变量名。例如:
Dim MyName As String
MyName = "X.TK"
MsgBox(MyName)
上面的第一句是变量的定义,第二句是变量的赋值,第三句把MyName用作MsgBox的参数。其中第二第三句都是变量的使用,可见和常量使用没有太大区别。不过常量定义后不能赋值而变量可以,接下来详细讲述变量的赋值。
3.2.6 变量的赋值
变量的赋值很简单,就是用一个等号连接变量跟表达式。这里的等号并不是相等的意思,而是把右边的值赋予左边的意思。
变量赋值的格式:
变量名=表达式
之前的介绍中,笔者写的是“变量名=变量值”。事实上,在变量的赋值上,右侧可以是一个表达式。表达式是由运算符和操作数组成的,相当于一个算式。在下一节中,笔者将详细讲述运算符和表达式。
3.3 运算符和表达式
3.3.1 运算符
VB.net中的运算符有五个,它们是加、减、乘、除、幂,符号分别是+、-、*、/、^。
用法就很简单了,至少前三个是没问题的。除法的写法是被除数在前,除数在后,幂的写法是底数在前,指数在后,也都很简单。至于运算顺序,是按照数学上的,也就是幂的优先级最高,然后是乘除,然后是加减。当然你可以加上圆括号来改变运算顺序,圆括号可以无限嵌套。
另外需要补充一点,就是字符串之间也可以用加号连接。注意是字符串之间,如果把字符串和整数等其他类型用加号连接,执行时会发生错误。
字符串用加号连接,相当于把它们连接起来,例如:
Dim Str As String
Str = "Hello" + "World"
代码执行后,Str的值为“HelloWorld”。
3.3.2 表达式
表达式其实就是算式,不过它的操作对象并不止数字这么简单,还包括任意一个变量或常量。
下面是一个合法的表达式:
((3 + 4) * 5 - 8 / 3) ^ 5
相信大家都可以看懂,就不多说废话了。然后是含变量的表达式,其实变量跟数都是一样的写法,例如下面的代码也是合法的:
Dim xInt As Integer
xInt = 1 + 2 + 3 + 4 + 5
xInt = 1 + 2 + 3 + 4 + 5 + xInt
上面的代码中,第一行第一了一个名为xInt的整数变量。第二行代码给xInt赋值,右侧的表达式运算结果为15,xInt的值为15。第三行代码中,xInt也作为表达式的一部分,第三行代码执行时,先计算右边的表达式,表达式的值为30,再赋予左边的变量xInt。因此三句代码执行完毕之后,xInt的值为30。
3.4 过程
3.4.1 什么是过程
在上一章中,我们省略了对过程的详细讲述,现在是时候来学习过程了。
过程是一段没有返回值的代码,也称方法,用于实现某些特定功能,可以理解为子程序,它可以包含参数列表。由过程名、参数列表和代码段组成。
3.4.2 关键字Sub
在上一章的最后一个实例中,我们在双击Form1之后,看到了这样的代码:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
当时笔者只是说,程序会在展示窗子之前执行中间的代码。但是实际上,这是一个用来处理窗体Load事件的过程。对于事件,现在还不需要了解,等到后面的章节会详细介绍。之前说过,Function是函数,Sub是过程。事实上,Sub也是一个关键字,它用于定义一个过程。上面的代码中还有一个关键字Private,Private的中文意思是“私有的”,它表示这个过程只能在Form1内部访问。这涉及到过程的可见性级别,会在以后介绍,这里可以省略Private关键字。
Sub的用法是:
Sub 过程名(参数1,参数2……)
代码段
End Sub
上面的格式用于定义一个过程,最后一句代码中的End也是一个关键字。它的用法很多,其中一种就是在一个空格之后接另一个关键字,标记某段代码的结束。上面的End Sub就是这种用法,Sub和End Sub组成一对,中间的就是实现功能的过程代码。
3.4.3 过程的定义
上面讲到,过程的定义需要用Sub关键字。过程的参数列表不是必须的,但是后面的圆括号是必须的。
因此,一个最简单的函数定义如下:
Sub MyFirstSub()
End Sub
这个函数是空的,但是一样可以调用,只不过调用没有任何的效果罢了(事实上,计算机内部还是会进行入栈出栈等一系列操作)。
接下来我们给它加上一行代码,用来输出一串字符。整个过程的定义就变成了:
Sub MyFirstSub()
MsgBox("This is my first sub.")
End Sub
这样,在调用这个过程的时候,就会弹出一个消息框了。
但是这样的过程还是不够灵活,每次调用出来的消息框都是一样的,要想改变内容,就要改变过程的定义。用什么方法解决呢?当然是参数了,参数就写在过程名后面的圆括号里。
3.4.4 参数列表
其实我们之前已经接触过参数列表了,就是在库函数MsgBox中,第一个参数就是消息框中间显示的字符串,现在我们来学习自己定义参数列表。
再次看这段代码:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
我们说过,圆括号里面的就是参数列表:
ByVal sender As System.Object, ByVal e As System.EventArgs
中间有一个逗号,显然这是两个参数,我们来看第一个参数:
ByVal sender As System.Object
首先是第一个关键字ByVal,它表示参数是按值传送的,在过程或函数中对它进行的修改并不会在过程或函数结束后产生影响。换句话说,参数前面有ByVal关键字的话,当这个参数是用变量进行传送时,参数在过程或函数里面可以修改,但是并不影响这个变量本身的值。除了ByVal外,还有ByRef,将在下一小节详细介绍它们的区别。
上面的sender很明显就是参数名了。然后是我们早就遇到过的As关键字,我们知道,它通常用于指定前面的操作对象的数据类型。这里的意思是,传来的参数sender的数据类型必须是System.Object,这个类型我们还没接触过,先不管。
一般来说,定义一个参数的格式:
ByVal 参数名 As 数据类型
函数或过程的执行中,可以将参数当作变量来用,用法是直接输入参数名。
让我们来写一个用来弹出消息框的过程,首先需要一个参数,表示要输出的内容:
ByVal msg As String
整个过程的定义就是:
Sub MyFirstSub(ByVal msg As String)
MsgBox(msg)
End Sub
可见在过程中使用参数的方法就是直接输入参数名。虽然上面这个过程并没有什么意义,因为我们完全可以直接调用MsgBox函数。不过当代码多起来的时候,过程就显得相当重要了。
3.4.5 参数的传递方式
上面说过,参数有两种传递方式,一种是ByVal,一种是ByRef。前一种ByVal指参数按值传递,后一种ByRef指参数按地址传递。如果传入的参数是简单的一个值,那么两者并没有区别。但是如果传入的是一个变量的话,后一种方式ByRef将会保存在函数或过程中对其作出的所有更改。
也就是说,ByRef是把整个变量传递过去,而ByVal只是把变量的值提取出来,再进行传递。
关于这两者的区别,将在章末的实例中用实验加以验证。
3.4.6 过程的调用
例如,一个过程定义如下:
Sub MyFirstSub(ByRef msg As String)
MsgBox(msg)
End Sub
对于它的调用,我们之前已经说过,直接输入过程名,然后带一对圆括号,如果有参数,就在圆括号里输入要传递的参数。
所以,调用上面的过程应该是这样:
MyFirstSub("This is my first sub.")
这是传递了一个值。又或者,可以传递一个变量:
Dim Str As String = "This is my first sub."
MyFirstSub(Str)
这两种调用的效果是一样的。由于过程没有返回值,没有函数复杂,但是有了过程的基础,相信学习函数是非常简单的。
3.5 函数
3.5.1 什么是函数
笼统地讲,函数就是有返回值的过程。至于什么是返回值,我们已经讲过,它相当于数学上函数的函数值。
3.5.2 关键字Function
函数的定义要用到关键字Function,和过程的定义大同小异:
Function 函数名(参数1,参数2……) As 返回值数据类型
代码段
End Function
和过程相比,除了把Sub换成了Function之外,还多了一个As关键字,指的是返回值的数据类型。在执行功能的函数中,返回值往往是Boolean,用来指示执行是否成功。
3.5.3 关键字Return
Return,顾名思义,就是返回,用在函数或者过程中。也许读者有疑问,过程没有返回值,为什么能用Return?事实上,Return并不仅仅用于返回一个值,它有两个用法。
第一个用法是直接打一个Return:
Return
这种用法只能出现在过程中,一旦执行到这一句代码,马上退出过程,回到调用该过程的位置继续执行。
另一种用法是:
Return 返回值表达式
这种用法用在Function中,程序遇到这一句代码,也会退出函数。不过在退出之前,先计算右侧的返回值表达式,把表达式的值作为返回值。然后退出函数,回到调用该函数的地方,给出返回值,继续执行。
函数中只能使用第二种,但是不用Return也是合法的,不过可能会造成程序异常。在编译的时候会给出警告,但是依然可以通过编译。
3.5.4 函数的定义
上面提到定义函数用的是关键字Function,返回值用关键字Return。下面定义一个用于计算两数之和的函数:
Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
上面定义的这个函数有两个参数,有了前面的知识,相信大家看懂这个是没有问题的。下面来复习一下上面的内容,让我们来定义一个函数,相当于数学中的f(x)=x^2+3x+5:
Function f(ByVal x As Integer) As Integer
Return x ^ 2 + 3 * x + 5
End Function
这很简单,相信读者都能做到,只是要注意3x中间要加一个星号,表示乘法。
3.5.5 函数的调用
函数的调用和过程的调用是一致的,只不过因为返回值的原因,函数调用本身可以作为一个表达式。
例如,有函数定义如下:
Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
那么,以下代码是合法的:
Dim ret As Integer
ret = AddFun(10, 2)
上面这段代码中,第一行定义了一个整数变量用来储存函数的返回值。第二行调用了函数,在执行第二行代码的时候,程序先到AddFun处执行代码,得到返回值12,然后将12赋给ret变量。也就是说,AddFun(10,2)这个调用本身就是一个值。
因此,下面的代码也是可以的:
Dim ret As Integer
ret = AddFun(10, 2) + 5
执行之后,ret的值为17。
这一章一口气讲了常量、变量、表达式、过程和函数,知识量有点大,这是笔者尽量在避免的。不过知识总是要学的,有的教材在这一章就把后面的知识都讲了,读者往往要反复看好多遍才懂。不过笔者认为最好的学习状态是在一页一页看得很顺的时候,一旦返回前面去看,学习的热情就很低了。因此对于事件、类等等更为复杂的知识,笔者选择在后面的章节中讲述。在下一章中,笔者将为读者介绍几种程序结构类型,它们是顺序结构、选择结构和循环结构。不过在本章的最后一节中,笔者将做一个实例,以巩固本章的内容。
对于本书的实例,如果有条件实际操作,读者最好可以自己输入代码,自己调试程序。如果只看教程不实操的话,再好的教材也是没用的。因为到后面的知识是越来越难,如果前面的基础知识不巩固,后面是很难看懂的。
由于很多读者喜欢一口气看几章的教程,再上机操作,笔者特意把学习的过程拉长,目的就是让初学者更好地掌握知识。如果在书里遇到实在没有办法解决的问题,欢迎联系笔者。
3.6 用实例巩固知识
3.6.1 创建项目
笔者在看书时,遇到类似这样的实例,也喜欢只看书上的运行结果,看完就算了。事实上,上机操作和只是看看书的差别很大。也是因为这样,笔者看了很多书都没有学会一门语言,望各位读者引以为戒。
启动Visual Studio,新建一个Windows窗体应用程序(Visual Sutdio 2005中为“Windows 应用程序”),命名为“App03”。
往窗体上添加三个Button控件,自动命名为Button1、Button2、Button3。
3.6.2 为程序添加代码
双击Button1,来到代码界面,看到如下的代码:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click
End Sub
End Class
这部分代码跟我们之前见过的很像,之前的那个过程是Form1_Load,就是在Form1加载过程中执行的代码。而这个是Button1_Click,从名字上看,是Button1被点击时执行的代码段。
我们定义函数和过程,必须在Class和End Class关键字的里面,不过也不能在一个过程里面定义过程,过程或函数之间应该是分开的,不能重叠。例如定义一个AddFun,完整的代码就是:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click
End Sub
Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
End Class
把调用的代码放在Button1_Click过程中,因为点击按钮时就会执行里面的代码。完整的代码如下:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click
Dim ret As Integer = AddFun(3, 4)
MsgBox(ret)
End Sub
Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
End Class
按F5,生成成功后,出现Form1,点击按钮,弹出消息框如图:
也许读者对这两行代码会有疑问:
Dim ret As Integer = AddFun(3, 4)
MsgBox(ret)
上面这两行代码中,第一行定义了一个整数变量ret,并赋初始值AddFun(3,4),也就是7,这应该没有问题。但是在第二行中,我们之前说过,MsgBox的第一个参数是字符串,也就是String。但是ret是Integer,为什么能放进MsgBox中呢,而且编译过程还没有警告。
事实上,这涉及到数据格式间的隐形转换,在后面的章节中我们会讨论这个问题。现在读者只需要知道,直接把整数甚至浮点数放在MsgBox中作为参数是可以的,因为程序会自动将它转换成字符串。
上面我们提到过参数有两种传递方式,分别是ByVal和ByRef,下面定义一个用于测试的过程:
Sub SubTest(ByVal a As String, ByRef b As String)
a = "Changed"
b = "Changed"
End Sub
上面这个过程有两个参数,第一个是ByVal按值传递,第二个ByRef是按地址传递。按照我们的设想,当传入两个变量作为参数的时候,第二个变量应该会被改为“Changed”。其实在过程代码执行的时候,这些修改都是有效的,只不过ByVal的参数的修改是对于一个值,而ByRef的参数修改则是对于传入的变量。因此ByVal的参数修改会在过程结束后丢失,而ByRef的可以保存。
双击Button2,在Button2_Click过程中输入如下代码:
Dim Str1, Str2 As String
Str1 = "Not Changed"
Str2 = "Not Changed"
第一句代码定义了两个String变量Str1和Str2,并在第二第三句中将它们的值都赋为“Not Changed”。如果将这两个变量作为参数传入过程SubTest,后一个参数应该会变为“Changed”,是否真的是这样呢?在上面的三句变量后面再加上:
SubTest(Str1, Str2)
MsgBox(Str1 + Str2)
这里的第一句把Str1和Str2作为参数传递给SubTest,在SubTest中对它们作了重新的赋值。第二句把Str1和Str2连接起来并输出。按F5编译,在点击Button2的时候出现了如图的消息框:
可见,在执行SubTest之后,Str1的值仍然是“Not Changed”,而Str2的值改为了“Changed”,和我们的预想是一样的。
接下来让我们复习一下常量,为什么放在最后呢?因为常量的使用是很少的,读者只需要有常量的概念即可。
在开始之前,先来看看刚才写的Button2_Click过程:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Str1, Str2 As String
Str1 = "Not Changed"
Str2 = "Not Changed"
SubTest(Str1, Str2)
MsgBox(Str1 + Str2)
End Sub
这里定义了两个变量,Str1和Str2。我们之前说过,Dim定义的是局部变量,实际上这个说法是不准确的。Dim定义的变量,如果放在过程或函数的外面,就是全局变量。只不过如果定义的是局部变量,就只能使用Dim。
如果读者对于局部变量和全局变量没有概念,笔者在这里作一个解释。局部变量是定义在函数或者过程中的,在执行过程中分配内存,执行完这个函数或者过程之后,内存就被释放。换句话说,别的函数或过程是访问不了它的,只能在定义它的代码段中访问。
而全局变量是定义在Class中,Sub或Function外的,按照笔者的习惯,它们一般写在程序的第二行代码处。写在Sub或Function外的变量或者常量,可以被本Class中所有Sub或Function访问,而且对于变量,在函数或过程结束后仍然保留对它的修改。
现在让我们定义一个全局常量,在Public Class Form1之后空出一行,写入如下代码:
Const PI As Double = 3.141592653
可以看见全局常量和局部常量的定义是完全一样的,不同点只在于写的位置。
由于PI是全局常量,它可以在任意一个函数或过程中访问了。
双击Button3,生成Button3_Click过程。在Button3_Click过程中键入如下代码:
Dim r As Double = 5
MsgBox(PI * r * r)
这里的代码,第一行定义了一个浮点数r,并赋初值5,用于表示圆的半径。第二行代码计算了圆的面积,圆周率正是使用了全局常量PI。
按F5运行,点击Button3,弹出的消息框如图:
输出的结果就是半径为5的圆的面积。
作为本章的实例,有些零散地复习了本章的内容。如果读者有疑问,请在进入下一章的学习之前把这些内容搞懂。下一章我们将开始学习程序的流程控制,也就是我们常常听说的If结构、For结构等等。这些知识远比本章的复杂,需要记忆的内容比较多,不过在熟练使用之后,就不存在记忆的问题了。
下面贴出本实例App03的全部代码:
Public Class Form1
Const PI As Double = 3.141592653
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click
Dim ret As Integer = AddFun(3, 4)
MsgBox(ret)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton2.Click
Dim Str1, Str2 As String
Str1 = "Not Changed"
Str2 = "Not Changed"
SubTest(Str1, Str2)
MsgBox(Str1 + Str2)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton3.Click
Dim r As Double = 5
MsgBox(PI * r * r)
End Sub
Function AddFun(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
Sub SubTest(ByVal a As String, ByRef b As String)
a = "Changed"
b = "Changed"
End Sub
End Class
上面的代码中,按照笔者的习惯,全局变量及常量是放在第一行后面的,这样写可以方便查阅。当然读者可以按照自己的习惯写,但是务必要工整,这样的代码可读性才高。
本实例App03的下载地址:
希望读者能自己写一次这个实例,如果能不看书写出来,说明这章的知识你已经巩固了。确认你掌握了本章的知识之后,赶快进入下一章的学习吧。