Array aus Klassen?

Moin moin. Ich möchte gerne zur Vereinfachung der Programmierung eine Array Variable bestehend aus mehreren Typen nutzen (vb.net). Wenn ich das Richtig sehe, brauche ich dazu eine Klasse und kann dann eine Variable vom Typ der Klasse deklarieren. Wenn ich das ohne Array mache klappt das auch schon, was ich da gebastelt habe. Aber warum geht das nicht mit einem Array? Falsche Syntax?
Als Beispiel hab ich mal das typische Telefonbuch Problem genommen:

Public Class Kontakte

Private m_strName As String
Private m_nTelefonNummer As Integer

Property Name() As String
Get
Return m_strName
End Get
Set(ByVal strValue As String)
m_strName = strValue
End Set
End Property

Property TelefonNummer() As Integer
Get
Return m_nTelefonNummer
End Get
Set(ByVal nValue As Integer)
m_nTelefonNummer = nValue
End Set
End Property

End Class

Public Class Form1
Sub Verarbeitung()

'Das hier funktioniert
Dim Telefonbuch As new Kontakte
Telefonbuch.Name = „Es geht, juhu!“
Telefonbuch.TelefonNummer = 12345

'Aber warum das hier nicht?
Dim Telefonbuch(10) As Kontakte
Telefonbuch(0).Name = „Hans Wurst“
Telefonbuch(0).TelefonNummer = 12345
Telefonbuch(1).Name = „Max Mustermann“
Telefonbuch(1).TelefonNummer = 23456
Telefonbuch(2).Name = „Willi Winzig“
Telefonbuch(2).TelefonNummer = 76543

End Sub
End Class

LG

'Aber warum das hier nicht?
Dim Telefonbuch(10) As Kontakte
Telefonbuch(0).Name = „Hans Wurst“
Telefonbuch(0).TelefonNummer = 12345
Telefonbuch(1).Name = „Max Mustermann“
Telefonbuch(1).TelefonNummer = 23456
Telefonbuch(2).Name = „Willi Winzig“
Telefonbuch(2).TelefonNummer = 76543

Hi,
muss es nicht heißen

Dim Telefonbuch as Kontakte(10)

?
(ganz sicher bin ich mir nicht, bin eher von der C# Seite

lg
Morrighan

Hallo Bax,

so kann das auch nichts werden!
Jede Klasse muss instanziert werden.
Eine Klasse instanzierst du in der Form

Dim DeineVariable as NEW DeineKlasse

Machst du dies nicht so hast du keinen Zugriff auf die Klasse, es sei denn du hast dort Methoden implementiert die Shared sind.

Anbei ein kleines Demo, wie es klappt :wink:

Option Explicit On
Option Infer On
Option Strict On

Public Class Form1
 Private T(10) As Kontakte


 Private Sub Form1\_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 For i As Byte = 0 To 10
 T(i) = New Kontakte
 Next
 End Sub


 Private Sub Button1\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 T(0).Name = "Alex"
 T(8).Name = "Peter"
 T(6).TelefonNummer = 1231234
 T(0).TelefonNummer = 43214234
 'etc.
 End Sub

 Private Sub Button2\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
 MsgBox(T(8).Name.ToString)
 End Sub
End Class

Public Class Kontakte

 Private m\_strName As String
 Private m\_nTelefonNummer As Integer

 Property Name() As String
 Get
 Return m\_strName
 End Get
 Set(ByVal strValue As String)
 m\_strName = strValue
 End Set
 End Property

 Property TelefonNummer() As Integer
 Get
 Return m\_nTelefonNummer
 End Get
 Set(ByVal nValue As Integer)
 m\_nTelefonNummer = nValue
 End Set
 End Property

End Class

MfG Alex

Hallo!

Du könntest auch mit einer „List“ aus System.Collections.Generic arbeiten. Das entspricht einer typisierten Arraylist.

Dim Telefonbuch As New List(Of Kontakte)

mfg
christoph