参数是在本过程中有效的局部变量。在调用一个带有参数的过程时,首先进行的是形参和实参的结合,即实现调用过程的实参与被调过程的形参之间的数据传递。VB .NET参数传递有两种方式:按值传递和按地址传递。
每个参数的格式说明为:
[{ByVal|ByRef}] [ParamArray] 参数名 [()] As 参数类型 [=默认值]
参数表中可有多个参数,以逗号隔开。
1. 按值传递参数
按值传递参数方式在VB .NET中是默认的,用“ByVal”关键字指出参数是按值来传递的。按值传递时,首先为形参变量分配一个临时的内存单元,然后将实参的值传递到这个临时单元中。按值传递是单向的,如果过程改变了形参值,则只是影响临时单元的值,而不会影响实参变量的值。例如:
Sub Inc(ByVal i As Integer)
i = i+1
End Sub
Sub CallInc()
Dim X As Integer = 10
Response.Write("X=" & X)
Inc(X)
Response.Write("X=" & X)
End Sub
CallInc过程中调用Inc函数,将实参X的值(10)传递给形参变量i,函数Inc()将i增1,但这个改变并不影响实参变量X的值,因此CallInc两次输出的X均为10。
2. 按地址传递参数
按地址传递参数是将调用过程的实参变量地址传递给相应的形参,这样实参和形参具有相同的地址,即形参与实参共享存储单元,因此,在被调用过程中若改变形参的值,则相应的实参值也被改变。用“ByRef”关键字指出参数是按地址来传递的。按地址传递的效率比较高,因为,无论变量是什么类型,传进的都只是4个字节。
【例3.8】将两个变量的值进行交换。程序执行时显示图3-15所示的界面,在上面的两个文本框中输入两个整数,点击“提交”按钮,将在下面的两个文本框中显示交换以后的值,如图3-16所示。
图3-15 运行界面
本例设计一个Swap(ByRef X, ByRef Y)子程序,使用传地址参数“ByRef”将X和Y对应的实参值交换。
源代码如下(Ex3-8.aspx):
|
| 图3-16 运行结果 |
3. 可选参数
参数表中含有“Optional”关键字的参数为可选的。若某参数是可选的,则参数表中该参数之后的所有参数也必须是可选的。每个可选的参数一定要有一个默认值,并且可选参数的默认值必须是常数。下面的例子给出了带有可选参数的过程的定义:
Sub ABC(Optional ByVal MyCountry As String="China")
…… '子程序体语句
End Sub
当调用这个过程的时候,可以选择是否给过程传递参数,如果不传递参数,则过程使用默认的参数。例如过程调用ABC() 未给出实参值,因此将使用参数的默认值”China”。
4. 数组参数
在定义过程时,可用数组作为参数。声明数组参数的语法格式与一般参数有区别。
语法:
[ByVal|ByRef] 形参数组名() [As 数据类型]
其中,数据类型为形参数组的元素类型。形参数组对应的实参数组必须也是数组,并且数据类型与形参数组元素类型一致。实参表中的数组不需要使用“()”。数组参数传递的特点是形参数组与实参数组共用存储空间。传递数组的方式可以是ByVal(默认方式) 或ByRef;当以ByVal方式传递时,过程中的语句可以改变数组的元素值,但不能改变参数数组。ByRef方式可以改变参数数组。
例如,以下子程序求数组A各元素之和,n为数组的最大下标值:
Sub SumArray(A() As Integer,n As Integer)
Dim i As Integer, S As Integer =0
For i = 0 To n
S += A(i)
Next
End Sub
【例3.9】显示如图3-17所示的货品表。设计一个子程序DisplayGoods,以二维数组作为输入参数,显示二维数组各元素的值;在Page_Load事件处理过程中,将货品的品名、数量和单价数据存储于一个二维数组中,将该数组作为实参传递给DisplayGoods。
图3-17 利用数组参数传递表格数据并显示之
源代码如下(Ex3-9.aspx):
说明:
1) Sub DisplayGoods(A(,) As Object),其中A(,)表示参数是二维数组。
2) 程序中使用了LBound(A, 1)、UBound(A,1)、LBound(A,2)、UBound(A, 2) 分别取数组第一维和第二维的最小和最大下标值。
3) 使用了Object类型的数组,Object类型可以是任何一种数据类型,包括字符串和数字
类型。
【责任编辑:老杨 Tel:(010)68576606-8005】
| 回书目 上一节 下一节 |
|
· SQL Server入门到精通.. · 交换技术配置手册技术.. · 超级网管员——网络应.. · 网络服务器配置与应用.. · Linux集群技术自测试题.. · JavaSript核心技术自测.. |
· ARP攻击与防范技术自测.. · 国庆挑战自己参加自测 .. · 《网管员必读—网络应.. · 历次技术自测 获奖网友.. · 51CTO国庆七天技术自测.. · 9.2.2 无线AP |
|
|||
| · 网管系统介绍 · 网络管理系统如何支撑I.. · CISSP认证成长之路 · 51CTO国庆充电专题之好.. · 网络技术经典基础教程 · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 · 充电计划之热门IT认证.. |
· 51CTO技术自测 挑战自.. · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 · 我是黑客我怕谁——讲.. · ARP攻击防范与解决方案 · Solaris 10 配置管理 · Solaris基础知识入门 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · C#技术开发指南 · Solaris 10 配置管理 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·体验Windows Server 2008.. ·将超星图书转成PDF文档 |
·使用 Office Communicati.. ·VMware Workstation 6.01.. |
| ·强烈质疑“步行1公里就能.. ·国庆期间新闻回顾:微软.. |
·9月第3周回顾:微软和英.. ·9月第2周回顾:四核之战.. |
| · 华为、贝恩资本22亿美元.. · NGN:下一代网络 · 网络访问中断大排查 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· Google推出唯一硬件——.. · 硬盘之父获得诺贝尔物理.. · 理性面对四核服务器选购 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 硬盘之父获得诺贝尔物理.. · 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. |