2010-10-01 83 views
1

我試圖ReDim從一個不同的類的成員對象數組。例如:ReDim數組指針VB6

Class1.cls

Dim mStuffArray() As New clsStuff 

Property Get StuffArray() As clsStuff() 
    StuffArray = mStuffArray 
End Property 

Class2.cls

Private Sub Foo(ByRef pClass1 As Class1) 
    Dim tStuffArray() As clsStuff 

    tStuffArray = pClass1.StuffArray 
    ReDim tStuffArray(1 To 2) 
End Private 

這裏的問題是,富似乎並沒有被ReDim'ing成員mStuffArray Class1中。任何想法我做錯了什麼?原諒我,如果我的VB6看起來很奇怪或命名約定不規範,我不得不深入到一些舊的遺留代碼,並相信新的VB6

戴夫

回答

3

Redim不會複製數組。

我認爲從屬性獲取數組獲得數據創建副本更有可能。文檔不是很清楚。 http://msdn.microsoft.com/en-us/library/aa261343(VS.60).aspx

使用公共成員變量會更簡單。爲什麼不使用集合而不是數組?

+0

是返回「副本」(值),而不是對原始參考。 – Bob77 2010-10-02 15:16:02

+0

感謝您對MarkJ和Regex的幫助。從現代語言回溯到VB 6已經很有趣了。 – 2010-10-29 19:43:04

1

我從來沒有看着VB6,但如果我我猜想,當你使用ReDim時,它會創建一個現有數組的副本並將tStuffArray更改爲指向新副本。但是,pClass1.mStuffArray仍然引用舊數組。

documentation for ReDim指出「使用ReDim創建新的數組,複製所有從現有的數組中的元素」

我建議增加一個方法到Class對私人mStuffArray變量執行使用ReDim。

Dim mStuffArray() As New clsStuff 

Property Get StuffArray() As clsStuff() 
    StuffArray = mStuffArray 
End Property 

Sub Foo() 
    ReDim mStuffArray(1 To 2) 
End Sub 

希望這能奏效。正如我所說,我不是一個VB6程序員,所以我可能會關閉它。

+0

啊有趣。這是我的代碼無法工作的合理原因。任何人都可以確認ReDim的行爲嗎?或者可能有任何其他優雅的方法來處理我的情況? – 2010-10-01 20:55:33

+0

我已經決定添加一個Let屬性,並在我重新設置數組後調用右鍵。但是,謝謝,您在ReDim上的信息有助於理解它的工作原理。 – 2010-10-01 21:51:02

+0

你已經鏈接到VB.Net文檔而不是VB6文檔 – MarkJ 2010-10-02 13:33:33

0

您可能還想考慮Dictionary對象。