クラスの配列をつくるには?

解決


hiroshi  2004-11-21 07:40:19  No: 117707

クラスの配列を作りたいのですがうまくいきません。
Class1というクラスが定義されているとして、
たとえばフォームのボタンをクリックして、
Class1の配列インスタンスcls(5)を
Dim cls(5) As New Class1
のように宣言すると、
”配列をNewで宣言できない”となってエラーになります。
Dim cls(5) As  Class1  で宣言し
cls(1)のパブリックメンバーPにアクセスしようとすると、
ビルド時点ではエラーは出ませんが、
ボタンをクリックするとエラーとなって、
”オブジェクト参照がオブジェクト インスタンスに設定されていません。”
というエラーコメントになってしまいます。

    Private Sub Button1_Click(  )         
        Dim cls(5) As Class1
        cls(1).P = 1 
    End Sub

VBを10年来やってきて、最近.NETに置き換えているのですが、
この辺のところが今ひとつ飲み込めなくて弱っています。
宜しくご指導お願いします。


メダカ  2004-11-22 18:04:40  No: 117708

class aa
Class CC
  Public Colora As String
  Public Suuryou As String
End Class

Public CCC(2) As CC

Sub New()
  CCC(0) = New CC
  CCC(1) = New CC
  CCC(2) = New CC
End Sub

end class

なんか変なやり方ですがこんな感じでできました


raki  URL  2004-11-22 19:03:16  No: 117709

メダカさんの方法であっていますが、補足説明。

例えば
Dim cls As New Class1

Dim cls As Class1 = New Class1
と同じ意味です。省略されているに過ぎません。
つまり、
Dim cls(5) As Class1
では、cls変数の型が指定されているだけで、
New (インスタンス化)されていないため、
実行時にエラーが発生します。
これを回避するにはメダカさんのレスのように、
配列へ一つずつインスタンス化してやる必要があります。

クラス、オブジェクト、インスタンス化、等をキーにして、
一度調べてみて下さい。


hiroshi  2004-11-23 04:12:53  No: 117710

メダカさん、rakiさんありがとうございました、解決しました。
いつもながら、問題が解決すると本当にうれしくて、もう全てのことが分かったような気がするのですが、しばらくするとまた次の問題にぶつかります。
今後とも宜しくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加