-
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
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数