Visual Basic.NET+SQL Server全程指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

实例2-21 Function过程的声明和调用实例

该实例实现步骤如下。

1 创建窗体

在本章的项目chapter2中,右键单击解决方案资源管理器中项目名下面对应节的文件夹“过程”,在弹出菜单中选择“添加”→“Windows窗体”菜单命令,在弹出的对话框中输入窗体名FunFrm,单击“添加”按钮完成窗体的创建。

2 添加控件

在窗体上添加两个TextBox文本框,用来输入和显示信息。

在窗体上添加两个Label控件用来对相关信息进行说明。

在窗体上添加一个Button按钮,通过按钮的单击事件调用Function函数,实现对用户输入函数的判断。

3 添加代码

本实例由一个窗体组成,名称为FunFrm.vb。

双击窗体,进入窗体代码编辑器,在窗体类中添加代码2-26中的代码。

代码2-26 FunFrm.vb

        01      Public Class FunFrm
        02          Function prime_number(ByVal n As Integer) As Boolean
        03          Dim i As Integer
        04          For i = 2 To Math.Sqrt(n)
        05              If n Mod i = 0 Then
        06                  Return False
        07                  Exit Function
        08              End If
        09          Next
        10          Return True
        11          End Function '结束Function过程
        12          Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
    System.EventArgs) Handles Button1.Click
        13          Dim num As Integer
        14          Dim b As Boolean
        15          num = Me.TextBox1.Text
        16          b = prime_number(num)
        17          If b = True Then
        18              Me.TextBox2.Text = "是"
        19          Else
        20              Me.TextBox2.Text = "不是"
        21          End If
        22      End Sub
        23  End Class

代码2-26执行步骤如下:

① 第2行代码定义一个Function过程,名称为prime_number,参数为n,过程返回值的类型为布尔型;

② 第3行代码定义一个整型变量i,作为下面For循环的计算器;

③ 第4行代码定义For循环计数器的初值和终值;

④ 第5行到第8行代码判断参数是否能被2到该数平方根中的某个数整除,若能则函数返回False,并强制退出Funtion过程,否则继续执行下一步;

⑤ 第10行代码返回True,说明此参数是素数;

⑥ 第16行代码调用prime_number函数判断用户输入的数,是否是素数,将返回的布尔值赋给布尔型变量b;

⑦ 第17行到第21行代码使用If语句判断布尔型变量的值,若为True则说明用户输入的整数是素数,若为False则说明用户输入的整数不是素数。

4 运行结果

按F5键,运行该程序代码,结果如图2-28所示。

图2-28 实例2-21运行结果

2.5.5 参数传递

在过程的调用中,往往需要传递参数。一个过程的每次调用,其结果根据作为参数传递的数据而有所不同。过程的参数可以是变量、常数或表达式。创建一个过程的时候,按声明变量的方法为过程声明参数,过程的参数默认的数据类型是Object,不过,也可以通过As子句声明参数为其他数据类型。示例如下:

        Dim a as Integer

过程声明的参数叫做形式参数(形参)。在调用过程时与形式参数相对应的参数叫做实际参数(实参)。

参数可以按值传递和按地址传递两种方法传递给一个过程。

1.按值传递

按值传递参数方式在VB.NET中是默认的。使用ByVal关键字指出参数是按值来传递的。按值传递参数时,由于传递的只是变量的副本,所以即使过程改变传递的数值,原变量的数值也保持不变。

按照值传递,格式如下:

        Sub或Function name([ByVal variable1 As type, ByVal variable2 As type...])
            [statements]
        End Sub或End Function

示例如下:

        Sub Accounts(ByVal num As Integer)
            '这里放语句
        End Sub

注意

ByVal关键字可以省略。

2.按地址传递

按地址传递参数是过程用变量的内存地址去访问实际变量的内容,其结果是将变量传递给过程时,通过过程可改变变量值。按地址传递参数时,如果给按地址传递参数指定数据类型,就必须将这种类型的值传给参数。用ByRef关键字指出参数是按地址来传递的,按地址传递的效率比较高,因为,无论变量是什么类型,传进的都只是4个字节。

按照地址传递,格式如下:

        Sub或Function name([ByRef variable1 As type, ByRef variable2 As type,...])
            [statements]
        End Sub或End Function

如下例中,参数“RunningTotal”是按地址传进来的,因此传进的变量值为参数“AcctNum”的值。

        Sub PostAccount(ByVal AcctNum As Integer,ByRef RunningTotal As Single)
            RunningTotal=AcctNum
        End Sub

在这里还要提醒读者一点,数组作为参数时必须按地址传递,因此不能使用ByVal关键字修饰,且形参数组与实参数组的数据类型应一致。

下面以实例说明参数传递的方法。