Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Array di oggetti in VB 2008
Forum - C# / VB.NET - Array di oggetti in VB 2008 - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
mattia1481 (Member)
Pro


Messaggi: 84
Iscritto: 03/11/2008

Segnala al moderatore
Postato alle 7:58
Mercoledì, 04/08/2010
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.

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:44
Mercoledì, 04/08/2010
Testo quotato

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

  1. ReDim vmpb(2, 8)


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

  1. For I As Byte = 0 To 2
  2.    For J As Byte = 0 To 8
  3.      vmpb(I, J) = New pezzo()
  4.    Next
  5. 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.

PM
Avatar
nostradamus1915 (Normal User)
Newbie


Messaggi: 12
Iscritto: 03/08/2010

Segnala al moderatore
Postato alle 17:54
Mercoledì, 04/08/2010
Ooooook funziona thanks :)

PM
Pagine: [ 1 2 ] Precedente | Prossimo