動的配列のPublic宣言の方法


srny  2005-08-01 11:09:37  No: 91200  IP: [192.*.*.*]

お世話になります。
配列宣言についての質問です。

クラスを作成し、その中でPublicで動的な配列を扱いたいのですが方法が良く分かりません。
Publicでは配列は使用できないようなので、Property Getを利用しようと考えたのですが使い方が良く分かりません。
配列の場合はどのように使用するのでしょうか?
また、動的な配列として使用することも可能ですか?
よろしくお願いします。
なお、VB6.0、WinXPを使用しています。

編集 削除
魔界の仮面弁士  2005-08-01 11:36:22  No: 91201  IP: [192.*.*.*]

方法は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プロパティとして実装しています。

編集 削除