vb.net 教程 2-9 过程

前端之家收集整理的这篇文章主要介绍了vb.net 教程 2-9 过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
过程
Sub过程(子过程)和Function(函数过程)

基本的语法:
访问级别 Sub 函数名称(ByVal/ByRef 参数 as 类型,ByVal/ByRef 参数2 as 类型……)
语句块
end sub

访问级别 Function 函数名称(ByVal/ByRef 参数 as 类型,ByVal/ByRef 参数2 as 类型……) as 类型
语句块
end function


注意的是,sub 语句不返回值,function 语句可以返回值,也可以不返回值,如果vs认为function没有返回值,它会给出一个警告提示,虽然不影响运行,但是确实不好看,我们还是尽量确保有返回值。

访问级别:通常情况下,在sub、function前面加上访问级别的关键词,如:Public、Protected、Friend、Private,限制对函数的访问。
如果在Module(模块)中,sub或者function前面没有加上访问级别的关键词,那么默认是Public。
对于Public的方法,在整个工程中都可以访问


*个人理解,无论是sub还是function都一定程度上解决代码重复使用的问题。
如下例子:
    Sub main()
        Dim info As String
        info = "这是一个测试"
        Call showInfo(info)
        info = "测试开始"
        Call showInfo(info)
        info = "测试结束"
        Call showInfo(info)
        Console.ReadKey()

    End Sub

    Sub showInfo(ByVal info As String)
        Console.WriteLine("注意:" & info)
    End Sub
sub main()中调用了showInfo()三次。输出结果如下:
注意:这是一个测试
注意:测试开始
注意:测试结束

注意,Call并不是必须,.一般情况下net中不提倡使用Call(请参见msdn call语句),这是我的个人习惯。

参数中,byval和byref 的区别在于:byval是值传递,byref是引用传递,简单来说,
sub/function的参数如果是byval,那么在过程中修改不了参数本身的值,而byref,在过程中可以修改参数本身的值,
*个人理解:byref是将参数对应的指针地址传递给过程。因此我习惯于称呼byval为传值,称呼byref为传址。
如下例:
    Sub main()
        Dim info As String
        info = "这是测试:"

        Console.WriteLine("显示byval使用情况")
        Call showInfo1(info)
        Console.WriteLine(info)

        Console.WriteLine("显示byref使用情况")
        Call showInfo2(info)
        Console.WriteLine(info)

        Console.ReadKey()

    End Sub

    Sub showInfo1(ByVal info As String)
        Console.WriteLine(info)
        info = info & "byval"
    End Sub

    Sub showInfo2(ByRef info As String)
        Console.WriteLine(info)
        info = info & "byref"
    End Sub
来看看结果:
稍微分析一下:
调用 showInfo1() ,由于参数是值传递,所以,在 showInfo1() 内部无论怎么修改参数info的值,并不会影响实际的值,
但是调用 showInfo2() ,由于参数是引用传递,在 showInfo2() 内部修改了参数info的值,实际的值也跟着变了。

function过程可以返回值,如下,两个整数相加,返回结果:
    Sub main()
        Dim a,b As Integer
        a = 10
        b = 21
        Console.WriteLine("{0}+{1}={2}",a,b,add(a,b))
        Console.ReadKey()
    End Sub


    Function add(ByVal i As Integer,ByVal j As Integer) As Integer
        add = i + j
    End Function

我们也可以使用
return (i+j )
来替换
add=i+j
return将直接退出function并返回值。例如:
    Sub main()
        Dim month As Integer
        Dim strMonth As String
        Dim strSeason As String

        Console.WriteLine("输入你喜欢的月份:")
        strMonth = Console.ReadLine()
        Try
            month = Integer.Parse(strMonth)
            strSeason = yourChoice(month)
            Console.WriteLine("你喜欢的季节是:" & strSeason)

        Catch ex As Exception
            Console.WriteLine("输入的不是数字")
        End Try
        Console.ReadKey()
    End Sub


    Function yourChoice(ByVal InputInfo As Integer) As String
        Select Case InputInfo
            Case 1,2,3
                Return "春季"
            Case 4,5,6
                Return "夏季"
            Case 7,8,9
                Return "秋季"
            Case 10,11,12
                Return "冬季"
            Case Else
                Return "无"
        End Select
    End Function


另外,在sub中可以使用exit sub ,function中使用 exit function ,立即退出过程。
还是看个简单的例子:
    Sub main()
        Dim students() As String = {"赵甲","钱乙","孙丙","李丁","周戊","吴己","郑庚","王辛"}
        Dim tobeFind As String
        tobeFind = "李丁"
        If findElement(students,tobeFind) = True Then
            Console.WriteLine("在学生中找到")
        Else
            Console.WriteLine("在学生中未找到")
        End If
        Console.ReadKey()
    End Sub

    Function findElement(ByVal students() As String,ByVal someone As String) As Integer
        findElement = False
        For i As Integer = 0 To students.Length - 1
            If someone = students(i) Then
                findElement = True
                Exit Function
            End If
        Next
    End Function

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看 vb.net 教程 目录

猜你在找的VB相关文章