Newsgroup: it.comp.lang.visual-basic
Titolo: Info Classi e Enum

Salve a tutti, sto scrivendo una classe (testa) che contiene una collection
(o array) di un'altra classe (riga).
Un elemento della classe righe voglio che sia un ENUM.
Per ora ho fatto la enum Public nella classe testa, e il tipo di dato nella
classe righi come Long.
E' corretto così com'è? Perchè nella classe righe non ho l'enum definito, e
magari in futuro potrebbe servirmi.
Inoltre sto pensando se sostituire la classe rigo con un semplice array di
type.
L'obiettivo è fare un metodo .Add e quindi fare un redim interno
dell'array. Creando la classe rigo potrei fare una collection, ma non mi
dovrebbe servire.
Come consigliate di muovermi?
Grazie

 mi dovrebbe servire.
Se la classe "Testa" espone una proprietà per accedere al singolo elemento 
dell'array, sei costretto a rendere pubblico il Type.
A 'sto punto, se non ci sono altri motivi per usare un UDT, tanto vale avere 
una classe, più che altro per omogeneità.
Bye
Raf 

 Grazie
Io farei la struttura Enum all'interno della classe Riga,
poi dichiarerei nella classe Testa una collection di classi Riga.
Sicuramente lo sai già, quindi scusa per l'eventuale info duplicata, ma 
se usi creazione guidata classi VB, ti viene generato tutto il codice 
per la gestione sia della classe base che di quella della collection, 
con l'aggiunta del metodo Add (collection) etc.
Molto comodo e ti risparmia un bel po' di tempo.
ciao
stefano

 una classe, più che altro per omogeneità.
No, ho solo bisogno di aggiungere elementi (righe), la classe testa poi
farà elaborazioni e restituirà dei totali calcolati (sulle righe).

 poi dichiarerei nella classe Testa una collection di classi Riga.
E' quello che avevo fatto :)
Non mi tornava l'idea di una enum pubblica che non sarebbe stata dichiarata
nella testa.
Grazie a tutti, mi rimetto a provare :D
(sono le prime classi :P)

 nella testa.
Ho scritto un po' di robetta.
La classe riga ha tutte i dati che mi servono, ed espone un metodo per
aggiungere la riga. Qualora alcuni dati non siano passati li andrà a
reperire dal DB.
La classe testa espone un .AddRow ed aggiunge alla collection della classe:
    Set mvarRigo = New clsRigo
    okRigo = mvarRigo.Init(mvarDBConn, mvarDataDoc, IdArt, Qta, PesoNetto,
TipoArticolo, Importo)
    If okRigo Then clRighe.Add mvarRigo
In più nella classe testa ho due funzione che elaborano dei totali dalla
collection.
Ora mi domandavo se andava bene aggiungere righe alla collection in quel
modo, e poi per distruggere il tutto, se al _Terminate devo ciclare la
collection e settare tutti gli elementi rigo a nothing, oppure basta
settare la collection a nothing:
  For Each mvarRigo In clRighe
    Set mvarRigo = Nothing
  Next
 
  Set clRighe = Nothing

  Set clRighe = Nothing
Altrimenti devi per forza svuotarla, perché in caso contrario i vari 
Class_Terminate dei singoli elementi non verranno eseguiti che al termine 
del programma, con conseguenze probabilmente nefaste...
Bye
Raf

>  Set clRighe = Nothing
Ho verificato, e con il set nothing della collection, passa dal _terminate
di ogni riga.
Ecco il _terminate della riga:
Private Sub Class_Terminate()
  Set mvarDBConn = Nothing
End Sub
Dove mvarDBConn è una variabile variant, in cui faccio quando inizializzo
la classe un Set mvarDBConn = ADOCn
E ADOCn è la connessione (aperta e attiva) di tipo ADODB.Connection.
In pratica, se ho ben capito, setto a nothing il *puntatore* interno
(mvarDBConn) ad ADOCN.
Probabilmente non serve neanche a nulla farlo...
Grazie per ora :)

 Grazie per ora :)
Prego
Ciao 

 Solo se hai cieca fiducia nel garbage collector di VB6 ;-)
Ok allora lo lascio :)
Comunque non ho ancora capito cosa succede se faccio
Dim a as miaclasse
set a = new class
set a = new class
Sembra che al secondo set non "distrugga" il primo (è voluto o è un
"BUG"?), tant'è che per inserire in una collection faccio
for i=0 to 10
  set a = new class
  a.init mieiparam
  collection.add a
next i
Io a logica pensavo che da 0-9 non fossero più accessibili. Infatti la
collection imho puntava a roba distrutta.
Ma se non usassi la collection, come potrei ripescare il primo riferimento
degli elementi in cui NON ho fatto nothing (senza fare un Set su altra
variabile ovviamente)?
Perchè le cose sono due, o per aggiungere elementi ad una collection di
classi non si fa come sto facendo io, oppure c'è qualcosa di strano in VB6.
Non vorrei che VB6 nel primo caso distrugga l'istanza, e nel secondo si
accorge che c'è un puntatore (la collection) che vi punta e lascia tutto in
vita.

 tutto in vita.
In effetti è così. Nel secondo caso i "puntatori" stanno negli elementi da 1 
a 10 della collection.
Ciao
Raf 

 a 10 della collection.
Ecco, mi pareva fosse strano ma qualcosa mi diceva che era cosě. Poi mi
leggo il link.
Tnx