VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > vb >
  • 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 教程 目录
————————————————
版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/uruseibest/article/details/70037891

相关教程