在VB里定义结构常量

本文是这个帖子讨论的小结,感谢chenjl1031和Tiger_Zhao的指点。

 

话说,我的函数参数有将近十个,挨个赋值容易出错,而且看起来很乱,所以想定义成结构体,好维护一些。另外,我想给这个结构体赋缺省值。在函数里进一步判断,如果是缺省值,就不做事,如果不是,才做事。VB只能对变体类型用ismissing函数,所以,我用这个办法来模拟变通ismissing的效果。所以我想定义一个结构常量,用来给这个结构参数赋缺省值。比如:

'自定义结构 Public Type TREENODEINFO_TYPE strName As String sngValue As Single sngPercent As Single strDetailTable As String lngDetailId As Long bytMultiGua As Byte lngNodeId As Long strExposedFlag As String strFdFlag As String End Type '定义个常量 const cc as TREENODEINFO_TYPE cc.strName = "slowgrace" cc.sngvalue = 1 …… cc.strFdFlag = "y" '然后我可以在函数的参数里,把它作为缺省值赋进去 public function AAA(optional tt as TREENODEINFO_TYPE = cc) …… end function

 

但是,讨论下来,发现这还真是个难题。

 

首先,常数的数据类型可以是:Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String 或 Variant。常量不能是结构

 

其次,可选参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object 或 Variant。如果参数不是 Optional,则也可以是用户定义类型,或对象类型。也就是说,可选参数也不能是结构

 

chenjl1031帮助我弄清楚上面两点之后,我就准备放弃结构,改用类了。我是这么做的。我直接在类的initialize里初始化变量。函数中判断类参数如果是nothing,就new一个(就会自动调用initialize),函数结尾再set nothing.

 

之后无所不能的Tiger_Zhao又出了个特棒的主意,他就用结构,呵呵。看下面的代码:

'在 Module 中用属性模拟“常量” public property get cc() as TREENODEINFO_TYPE cc.strName = "slowgrace" cc.sngvalue = 1 …… cc.strFdFlag = "y" end property '结构参数无法加 optional public function AAA(tt as TREENODEINFO_TYPE) end function '不过调用时将“常量”传进去就可以了 call AAA(cc)

 

其实,用类也可以用全局的 Property Get 做初始化。作为 optional 参数,函数中检查参数是否为 nothing,是的话就用属性 cc 替代。不过的话,在 initialize 中自动是最正规的做法。

 

 

 

 

 

 


 

你可能感兴趣的:(在VB里定义结构常量)