使用类的参数数量错误或无效的属性分配 [英] Wrong number of arguments or invalid property assignment using classes

查看:29
本文介绍了使用类的参数数量错误或无效的属性分配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

谁能解释为什么我在第 12 行收到这个错误?它显然是一个数组.为什么我不能通过这种方式获取索引位置 0 的值?我真的需要那个额外的变量 (arr) 吗?

Could anyone explain why I get this error on line 12? It is clearly an array. Why can I not obtain the value in index position 0 in this way? Do I really need that extra variable (arr)?

Option Explicit

Dim obj
Set obj = new ClsTest

obj.singleval = "test"
MsgBox obj.singleval                     ' test

obj.repeatingval = split ("a,b,c", ",")
MsgBox IsArray(obj.repeatingval)         ' true
MsgBox UBound(obj.repeatingval)          ' 2
MsgBox obj.repeatingval(0)               ' Wrong number of arguments or invalid
                                         ' property assignment: 'repeatingval'
Dim arr : arr = obj.repeatingval
MsgBox IsArray(arr)                      ' true
MsgBox UBound(arr)                       ' 2
MsgBox arr(0)                            ' a

Class ClsTest
    Private m_singleval
    Private m_repeatingval

    Public Property Get singleval()
        singleval = m_singleval
    End Property

    Public Property Let singleval(w)
        m_singleval = w
    End Property

    Public Property Get repeatingval()
        repeatingval = m_repeatingval
    End Property

    Public Property Let repeatingval(w)
        m_repeatingval = w
    End Property
End Class

推荐答案

如果您想要索引访问(数组)属性 repeatingval,您需要更改属性定义以包含索引.但是请注意,getter 和 setter 的定义必须相同:

If you want indexed access to the (array) property repeatingval you need to change the property definition to include an index. Beware, though, that getter and setter must be defined alike:

Class ClsTest
    ...
    Public Property Get repeatingval(i)
        repeatingval = m_repeatingval(i)
    End Property

    Public Property Let repeatingval(i, w)
        m_repeatingval(i) = w
    End Property
End Class

你不能有一个属性,其中 setter 接受一个数组,getter 返回该数组的一个元素.为了能够分配数组并检索该数组的元素,您需要 2 个不同的属性:

You can't have a property where the setter takes an array and the getter returns an element of that array. To be able to assign an array and retrieve an element of that array, you need 2 different properties:

Class ClsTest
    ...
    Public Property Get repeatingval(i)
        repeatingval = m_repeatingval(i)
    End Property

    Public Property Let repeatingval(i, w)
        m_repeatingval(i) = w
    End Property

    Public Property Get repeatingarr
        repeatingval = m_repeatingval
    End Property

    Public Property Let repeatingarr(w)
        m_repeatingval = w
    End Property
End Class

Set obj = New ClsTest

obj.repeatingarr = Split("a,b,c", ",")
MsgBox IsArray(obj.repeatingarr)
MsgBox UBound(obj.repeatingarr)
MsgBox obj.repeatingval(0)

这篇关于使用类的参数数量错误或无效的属性分配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆