お世話になります。
配列宣言についての質問です。
クラスを作成し、その中でPublicで動的な配列を扱いたいのですが方法が良く分かりません。
Publicでは配列は使用できないようなので、Property Getを利用しようと考えたのですが使い方が良く分かりません。
配列の場合はどのように使用するのでしょうか?
また、動的な配列として使用することも可能ですか?
よろしくお願いします。
なお、VB6.0、WinXPを使用しています。
方法は2つあります。
ひとつは、配列そのものを返すメンバを作成する事です。
Public Property Get MyArray() As String()
MyArray = Split("1 2 3")
End Property
Private Sub Command1_Click()
MsgBox MyArray()(0)
MsgBox MyArray()(1)
MsgBox MyArray()(2)
End Sub
もうひとつは、配列の添字を引数にして実装するパターンです。
Public Property Get YourArray(ByVal Index As Integer) As String
YourArray = CStr(Index + 1)
End Property
Private Sub Command1_Click()
MsgBox YourArray(0)
MsgBox YourArray(1)
MsgBox YourArray(2)
End Sub
前者の場合、取得専用プロパティやメソッドとするならば良いのですが、
Public Property Let のように、書き込みも可能なメンバとする場合には、
.member(0) = "新しい値"
のような事ができず、
v = .member
v(0) = "新しい値"
.member = v
のように、配列全体に対する操作が必要となるという制限がつきます。
そして後者の手法は、ListBox の Selectedプロパティや Listプロパティと
同様の実装方法となります。
前者の方法に比べて、個々の要素への読み書きは楽になりますが、
データ全体を配列として得る事ができなくなります。どちらも一長一短です。
あるいは、この問題を解決するために、この両方を採用する手法もあります。
たとえば、Scripting.Dictionaryでは、前者をItemsメソッドとして実装し、
後者を読み書き可能な Itemプロパティとして実装しています。