[VB.NET] Gebruik Types/+Arrays/Collections

Pagina: 1
Acties:

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 04:27
Na een tijdje met VB.NET geklooid te hebben wilde ik een beetje een leuk projectje starten.

Alles leuk en aardig tot ik bij de Types aan kwam, wat in VB6 Types heette, was nu ineens pleite. Na wat logisch denkwerk (enige C++ kennis hielp ;) ) kwam ik uit bij Classes.

De volgende class heb ik gedefinieerd :
code:
1
2
3
4
5
6
7
Public Class HDD_Info
    Public Number As Integer
    Public DriveLetter As String
    Public TotalSize As Double
    Public FreeSpace As Double
    Public DriveType As Integer
End Class

Nu wilde ik voor deze class een Array maken, of een collection. Nu was mijn idee natuurlijk, hey dat doen we gewoon zo :
code:
1
Dim arHDDs(255) as HDD_Info

Maarja, als dat had gewerkt dan had ik hier niet gepost natuurlijk. Dan begint hij te zeiken zodra ik er data in wil zetten. Dit doet hij ook bij een ReDim.
code:
1
2
3
An unhandled exception of type 'System.NullReferenceException' occurred in LCD Display v2.exe

Additional information: Object reference not set to an instance of an object.

Een normale Array aanmaken van integers (bijvoorbeeld) werkt wel op deze manier.

Mijn vraag is nu, hoe de heck krijg ik hier data in. Zodra ik er een collection van maak, wat mij ook een oplossing leek, dan krijg ik XX keer hetzelfde 'item' in die collection, tenminste zodra ik de collection doorloop zijn alle gegevens gelijk aan het laatste 'item' wat ik heb toegevoegd/t.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Dim arHDDs(255) As New HDD_Info misschien?
(Ik heb zelf geen ervaring met VB.Net, wel C#)

Anders kun je zoiets proberen:
code:
1
2
3
For i = 0 To 255
  arHDDs(i) = New HDD_Info()
Next i

(ofzo :))
Mijn vraag is nu, hoe de heck krijg ik hier data in. Zodra ik er een collection van maak, wat mij ook een oplossing leek, dan krijg ik XX keer hetzelfde 'item' in die collection, tenminste zodra ik de collection doorloop zijn alle gegevens gelijk aan het laatste 'item' wat ik heb toegevoegd/t.
Kun je eenst een stukje code laten zien hoe je dat gedaan hebt?

[edit]
Misschien ook wel handig als ik uitleg waarom het niet werkt zoals jij het doet. Met 'Dim arHDDs(255) as HDD_Info' maak je slechts een array met referenties naar HDD_Info objecten. Ze wijzen echter nog nergens naar, vandaar dat je een NullReferenceException krijgt.

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 04:27
Op donderdag 28 maart 2002 11:35 schreef marcusk het volgende:
code:
1
2
3
For i = 0 To 255
  arHDDs(i) = New HDD_Info()
Next i
Dit was inderdaad het probleem, voordeel van VB6 was dat dit niet hoefde, maar je , steeds meer OO programmeren natuurlijk, best dom van me om hier niet aan te denken.

Thanks!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 10-09 14:16

Crazy D

I think we should take a look.

Type heet in VB.net Structure.
In VB6 moest je ook, als je een array van classes bijhield, per item een New... doen. Bij een type niet, en dat hoeft bij een structure ook niet.

Exact expert nodig?


Verwijderd

Types zijn inderdaad Structures geworden, geen classes.
Probeer maar eens een Structure te maken, misschien dat het dan wel werkt.

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 04:27
Heheh, ok dan, thanks, dat wist ik ook niet. Ga ik effe proberen, want met die new's erbij is het toch wel wat onhandig....

Verwijderd

Als je een structure gebruikt heb je als het goed is geen New nodig. New bestond trouwens ook al in VB6.
Pagina: 1