过程
Sub过程(子过程)和Function(函数过程)
Sub过程(子过程)和Function(函数过程)
注意的是,sub 语句不返回值,function 语句可以返回值,也可以不返回值,如果vs认为function没有返回值,它会给出一个警告提示,虽然不影响运行,但是确实不好看,我们还是尽量确保有返回值。
访问级别:通常情况下,在sub、function前面加上访问级别的关键词,如:Public、Protected、Friend、Private,限制对函数的访问。
如果在Module(模块)中,sub或者function前面没有加上访问级别的关键词,那么默认是Public。
如果在Module(模块)中,sub或者function前面没有加上访问级别的关键词,那么默认是Public。
对于Public的方法,在整个工程中都可以访问
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
注意:这是一个测试
注意:测试开始
注意:测试结束
注意:测试开始
注意:测试结束
注意,Call并不是必须,.一般情况下net中不提倡使用Call(请参见msdn call语句),这是我的个人习惯。
参数中,byval和byref 的区别在于: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的值,实际的值也跟着变了。
但是调用 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 教程 目录