何时使用括号,何时在VB6中分配变量时不使用括号?

时间:2012-05-01 13:17:49

标签: vb6

我正在查看一些旧的VB6代码。我是VB的新手,我来自C / Java背景,所以我不理解一些赋值语句。这是一个例子 -

     Private Type UGH
       Rsp(3) As Byte
       ProgramId(7) As Byte
       RID(7) As Byte
       TID(3) As Byte
       FL(39) As Byte
    End Type
    Private UHeader As UGH

稍后,作业如下 -

    With UHeader
    StringToByteArray UHeader.ProgramId(), "ABCDPQRS"

我的问题是,为什么在上述作业中使用括号后的括号?对我来说,这似乎是一个函数调用,但它显然不是函数调用。那是什么?

4 个答案:

答案 0 :(得分:5)

实际上并不需要它。在没有括号的情况下调用相同的行将完全相同。它被允许的原因是因为它是一个字节数组。

也许重写这样的行会使它更具可读性:

call StringToByteArray(UHeader.ProgramId(), "ABCDPQRS")

但这也是有效的:

call StringToByteArray(UHeader.ProgramId, "ABCDPQRS")

如果StringToByteArray方法是函数而不是子例程,那么你可能会更有意义:

Private Function StringToByteArray(ByVal strValue As String) As Byte()
    'conversion code left out
End Function

然后你可以这样称呼它:

UHeader.ProgramId() = StringToByteArray("ABCDPQRS")

或者这个:

UHeader.ProgramId = StringToByteArray("ABCDPQRS")

答案 1 :(得分:1)

本例中的括号用于指定数组。对于Rsp(3) as Byte,它表示从0到2索引的3个字节的数组。

对于行:StringToByteArray UHeader.ProgramId(), "ABCDPQRS", StringToByteArray是一个采用字节数组的方法 - 将数组传递给方法时,将其作为array()传递。

答案 2 :(得分:0)

括号也用于数组语法。

所以说,StringToByteArray UHeader.ProgramId(), "ABCDPQRS"不是严格意义上的赋值,它是一种方法(子程序或函数)调用。 StringToByteArray将在程序中的某处定义,它可能需要一个ByRef数组参数,一个字符串参数,它可能会将字符串参数复制到字节缓冲区中。

答案 3 :(得分:0)

UHeader.ProgramId实际上是指向数组的指针。您可以这样做:StringToByteArray UHeader.ProgramID, "ABCDPQRS"。 VB6中的规则是函数需要对参数列表进行括号化,而Subs需要非括号,除非前面有Call语句,否则它们会这样做。

由于您通过引用传递数组(默认值),因此在子例程中执行的操作将在数组本身上执行。基本上,您正在传递一个指向数组和文字字符串的指针,子程序将使用字符串中的字符填充数组。有点像“非正式”函数调用,如果你愿意的话。