首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

:函数间传递ParamArray参数数组的有关问题

2012-02-03 
高手请进:函数间传递ParamArray参数数组的问题我写的一个小程序中需要在函数间传递用ParamArray指定的参数

高手请进:函数间传递ParamArray参数数组的问题
我写的一个小程序中需要在函数间传递用ParamArray指定的参数数组,而且被调用的函数也使用ParamArray来指定参数,但现在被两个问题难住了,希望各位高手能够指点迷津。

示例代码在下面。

VB code
Private Function MyFunc(ParamArray a())    If a()为空 Then  '<--这里应该怎么写?        MyFunc = SubFunc1()    Else '不为空            If a()包含结构体 Then  '<--这里应该怎么写?            MyFunc = SubFunc2(a)  '<--怎么写才能将包含结构体的数组正确传递到被调用的函数?        Else            MyFunc = SubFunc3(a)        End If    End IfEnd FunctionPrivate Function SubFunc1()    '代码略End FunctionPrivate Function SubFunc2(ParamArray SomeParam())    '代码略End FunctionPrivate Function SubFunc3(ParamArray SomeParam())    '代码略End Function


1. 参数数组为空,也就是不指定参数的情况下:
  (1) 如果能够在数组为空的时候将空数组传递给被调用的函数,是最理想的(直接传递参数到SubFunc2)。但如果不能,则——
  (2) 我想用判断数组是否为空的方法来分别调用SubFunc1和SubFunc2。此时,如何判断数组是否为空?

2. 参数中可能包含结构体,如何能够将包含结构体的参数数组准确传递给被调用的函数?


第一次提问,分不是很多,希望大家多多帮助,谢谢!

[解决办法]
判断的方法:
1.可以判断参数的个数
2.判断参数名称所在位置的类型

判断出来以后,分别执行对应的函数

不过我的意见在做实际做的时候,不用这么写,要我的话:

1. Call MyFunc()
2. Call MyFunc(i, l, s)
3. Call MyFunc(l, s, varTest,i)
改为:
SubFunc1
SubFunc2 i,l,s
SubFunc3 l, s, varTest,i
[解决办法]
我来说一说呵呵呵。
1、ParamArray中,不支持结构型参数传递。
2、ParamArray参数,是一定会被初始化的。如果外部没有传参数,那么Ubound为-1.一般用Ubound +1可以获得外界传递的参数个数。
3、Paramarray参数,不能作为参数传递给另一个函数。
有关如何传递ParamArray,可以参考VBCorlib代码中有关Helper.Swap的用法。很有借鉴意义。

[解决办法]
结构,不支持后期绑定的。所以不能给ParamArray赋值。ParamArray的实质就是Variant型数组。并且VB运行时在传出前做了锁定。
[解决办法]
同一个方法执行不同的代码嘛,多态

VB code
'------------------------------------Form1代码-------------------------'全都调用Execute方法来执行不同的操作Public Sub Execute(obj As IExecute)    obj.ExecuteEnd Sub'也可以这样写,就可以不用iExecute.cls了,也不用Implements 它了'Public Sub Execute(obj As object)'    obj.IExecute_Execute'End SubPrivate Sub 执行方法1_Click()    Execute New cExecuteAEnd SubPrivate Sub 执行方法2_Click()    Dim x As New cExecuteB    x.ParamA = 10    Execute xEnd SubPrivate Sub 执行方法3_Click()    Dim x As New cExecuteC    x.x = 100    x.y = 100    Execute xEnd Sub'-----------------------------Moudle.bas代码 定义一个结构----------------Public Type Point    x As Long    y As LongEnd Type'--------------------------------------cExecuteA.cls代码-------------------------Implements IExecute'这个类执行不需要参数Public Sub IExecute_execute()    MsgBox "这个类执行不需要参数"End Sub'cExecuteB代码Implements IExecutePublic ParamA As Long'这个类执行需要一个参数Public Sub IExecute_execute()    MsgBox "这个类执行需要一个参数" & ParamAEnd Sub'----------------------------cExecuteC.cls代码------------------------Implements IExecutePrivate typeA As Point Public Property Let x(value As Long)    typeA.x = valueEnd PropertyPublic Property Let y(value As Long)    typeA.y = valueEnd Property'这个类执行需要一个结构Public Sub IExecute_execute()    MsgBox "这个类执行需要一个结构" & "x=" & typeA.x & ",y=" & typeA.yEnd Sub'----------------------------------------IExecute.cls代码-------------------------Public Sub Execute()End Sub 

热点排行