mattia1481 (Member)
Pro
Messaggi: 84
Iscritto: 03/11/2008
|
Primo :
io uso VB.NET 2005...ma dubito che nella versione 2008 non funzioni System.Array.Resize
Secondo :
Con le istruzioni che ti ho scritto non hai fatto altro che inizializzare un array di puntatori "vmpb" nulli (Nothing), ora sta a te passare ad ognuno di questi puntatori una istanza della classe "vmpb".
Mi permetto di consigliarti la lettura/studio di qualche testo in materia prima di iniziare a sviluppare qualche programma, giusto per avere qualche concetto di base con cui lavorare.
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Postato originariamente da nostradamus1915:
Ciao a tutti, sto provando a creare un array di oggetti in VB 2008. Vi spiego come ho fatto:
1. Ho creato una nuova classe di nome pezzo
Public Class pezzo
Public x, y, tipo As Integer
Public alive As Boolean
Public move(8, 8) As Boolean
Public colour As Char
End Class
2. Ho dichiarato le variabili globali all'interno del modulo
Module mod
Public vmpb(2, 8) As pezzo
Public vmpn(2, 8) As pezzo
Public scacc As scacchiera
End Module
3. Infine ho eseguito le diverse operazioni di assegnazione nel form
Dim i, k As Integer
For i = 1 To 2
For k = 1 To 8
vmpb(i, k).alive = True
vmpn(i, k).alive = True
vmpb(i, k).colour = "b"
vmpn(i, k).colour = "n"
vmpb(i, k).x = i
vmpb(i, k).y = k
vmpn(i, k).x = i + 7
vmpn(i, k).y = k
Next
Next
Il problema si verifica quando eseguo il programma. Infatti mi viene richiesto di inserire new affianco alla dichiarazione dell'oggetto, quindi Public vmpb(2, 8) As NEW pezzo, ma, quando vado ad apportare la modifica, mi dice che per un array non può essere usata l'istruzione new. Come posso fare? Spero possiate aiutarmi, grazie. |
Cercherò di riassumere tutto in alcuni punti:
1. Non è possibile inizializzare array o matrici nella dichiarazione di classi e/o strutture. Nella fattispecie, non puoi specificare gli indici. Devi inizializzare l'array manualmente prima dell'uso.
2. Per ridimensionare un array si possono usare alcuni metodi: Array.Resize, ReDim e ReDim Preserve. L'ultimo è inutile in questo caso, poiché serve a preservare dati esistenti, ma prima dell'uso non esiste alcun dato. Scrivendo:
Codice sorgente - presumibilmente C# / VB.NET |
Inizializzi la matrice con 3 righe e 9 colonne. Questa sintassi non vale per gli array di array.
3. Se conoscessi le classi, sapresti che ogni variabile di tipo reference (oggetto) deve essere inizializzata. Come ha detto mattia, ora hai solo una matrice piena di valori nulli (Nothing), ad ognuno di essi devi assegnare un nuovo oggetto:
Codice sorgente - presumibilmente VB.NET |
For I As Byte = 0 To 2 For J As Byte = 0 To 8 vmpb(I, J) = New pezzo() Next Next
|
4. Nel tuo caso è inutile usare classi, perchè sprechi solo codice (come ti ho mostrato al punto sopra). Usa invece una struttura, che non ha bisogno di inizializzazione. |