2014-11-23 24 views
0

參數或無效的屬性賦值不對任何人都可以解釋爲什麼我得到的第12行這個錯誤?這顯然是一個陣列。爲什麼我不能以這種方式獲得索引位置0的值?我真的需要額外的變量(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 

回答

0

如果你想repeatingval您需要更改屬性定義爲包含索引的(陣列)屬性索引訪問。當心,雖然,getter和setter必須都定義:

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 

你不能在二傳手需要一個陣列和吸氣返回數組的元素屬性。爲了能夠將數組分配和檢索數組的元素,你需要2個不同的屬性:

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) 
0
Dim thing 
For Each thing in obj.repeatingval 
    msgbox thing 
Next 

這會給你訪問它。