:函数间传递ParamArray参数数组的有关问题
高手请进:函数间传递ParamArray参数数组的问题
我写的一个小程序中需要在函数间传递用ParamArray指定的参数数组,而且被调用的函数也使用ParamArray来指定参数,但现在被两个问题难住了,希望各位高手能够指点迷津。
示例代码在下面。
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运行时在传出前做了锁定。
------解决方案--------------------
同一个方法执行不同的代码嘛,多态
我写的一个小程序中需要在函数间传递用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 If End Function Private Function SubFunc1() '代码略 End Function Private Function SubFunc2(ParamArray SomeParam()) '代码略 End Function Private 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.Execute End Sub '也可以这样写,就可以不用iExecute.cls了,也不用Implements 它了 'Public Sub Execute(obj As object) ' obj.IExecute_Execute 'End Sub Private Sub 执行方法1_Click() Execute New cExecuteA End Sub Private Sub 执行方法2_Click() Dim x As New cExecuteB x.ParamA = 10 Execute x End Sub Private Sub 执行方法3_Click() Dim x As New cExecuteC x.x = 100 x.y = 100 Execute x End Sub '-----------------------------Moudle.bas代码 定义一个结构---------------- Public Type Point x As Long y As Long End Type '--------------------------------------cExecuteA.cls代码------------------------- Implements IExecute '这个类执行不需要参数 Public Sub IExecute_execute() MsgBox "这个类执行不需要参数" End Sub 'cExecuteB代码 Implements IExecute Public ParamA As Long '这个类执行需要一个参数 Public Sub IExecute_execute() MsgBox "这个类执行需要一个参数" & ParamA End Sub '----------------------------cExecuteC.cls代码------------------------ Implements IExecute Private typeA As Point Public Property Let x(value As Long) typeA.x = value End Property Public Property Let y(value As Long) typeA.y = value End Property '这个类执行需要一个结构 Public Sub IExecute_execute() MsgBox "这个类执行需要一个结构" & "x=" & typeA.x & ",y=" & typeA.y End Sub '----------------------------------------IExecute.cls代码------------------------- Public Sub Execute() End Sub