Newsgroup: it.comp.lang.visual-basic
Titolo: Sempre sulle collection e classi

Mi sfugge una cosa, soprattutto guardando l'help le cose
mi risultano ancora più contorte.
Se per fare l'add di un item, faccio
dim myclass ad new myclass1
mycollection1.add myclass
e quando faccio il remove
gli dico solo
mycollection1.remove itemdarimuovere
l'instanza creata di myclass ... però rimane sempre appea ...
e non credo sia sufficiente un set myclass = nothing per
rimuoverla ... perchè se ne ho create n di istanze ...
quale di queste vb va a distruggere?
Certo non è la collection che gli dice su quale stavo
lavorando.
-- 
Saluti
Andrea Moro

 rimuoverla ... perchè se ne ho create n di istanze
per rimuovere totalmente la classe devi ovviamente impostare anche MyClass a
Nothing prima che MyClass esca dall'area di visibilità.
Saluti

 quale di queste vb va a distruggere?
Il parametro passato a remove č un numero, piů propriamente la posizione da 
cancellare nella collezione.

Si ma il problema è che io non faccio mai
set mycollect(i) = myclass
anche perchè questa dovrebbe essere roba 
vb.net
Io, help di vb 6 alla mano, faccio
dim x as new my class1
mycollect.add x
e anche se facessi una cosa del tipo
dim x as class1
set x = new class1
mycollect.add x
quando dovrei fare il remove dell'oggetto dalla
collection, comunque non saprei come scaricare la classe
-- 
Saluti
Andrea Moro

 lavorando.
Più o meno.
dunque, cominciamo.
Ti scrivo un micro codice e lo spiego:
Dim x as myclass1
Set x= new Myclass1 'Qui crei una istanza
Collezione.Add x 'Qui aggiungi un puntatore nella collezione, quindi
l'oggetto x ha adesso due puntatori addosso
Set x= new Myclass1 'Qui crei un'altra istanza. Con un unico passaggio, hai
distrutto uno dei due puntatori all'istanza precedente, che però è ancora
viva perchè puntata da un puntatore memorizzato nella collection
Collezione.Add x 'Qui aggiungi un secondo puntatore nella collezione, e
l'oggetto x (che però non è lo stesso di prima, ma una nuova istanza di
myclass1), ha adesso addosso due puntatori
Collezione.Remove 2 'Qui distruggi un puntatore di quelli nella collection,
ma l'oggetto x è ancora puntato proprio dalla variabile x, quindi non muore.
Collezione.Remove 1 'Qui distruggi l'ultimo puntatore esistente alla prima
istanza, che adesso muore
Set x=nothing  'Qui distruggi l'ultimo puntatore esistente alla prima
istanza, che adesso muore
Ciao
Alberto
-- 
Santo cielo, Magnum, si può sapere cos'è questo baccano?
Higgins, posso spiegarle...
Credo non sia necessario.
Zeus, Apollo, a voi...

 istanza, che adesso muore
Scusa: 'alla seconda istanza'
Ciao
Alberto

Quindi per farla breve dovrebbe essere che ad ogni remove
mi faccio anche un set x = nothing e teoricamente
vb mi tira già anche l'istanza creata precedentemente.
Right?
Andrea

-- 
Saluti
Andrea Moro

 Right?
No, non e' necessario ad ogni remove, rileggi bene cosa ha scritto
Alberto...magari prova a guardare la cosa in quest'altra forma:
'evita per quanto possibile (cioe' sempre) 'As New', che crea oggetti
autoistanzianti
'e per fare queste prove in particolare ti confonde le idee perche' non puoi
mai
'testare se sono nothing...
Dim x As MyClass
Dim i As Integer
Dim Collezione As Collection
Set Collezione = New Collection
For i = 1 To 10
    'questo distrugge ogni volta il puntatore precedente ma non l'istanza,
    'tenuta in vita dall'aggiunta in collection
    Set x = New MyClass
    Collezione.Add x
Next
'a questo punto hai 10 istanze di MyClass e 11 puntatori attivi; l'ultimo
elemento
'della collection e' puntato 2 volte, una dalla collection stessa e una da x
Set x = Nothing
'ora uno dei due puntatori doppi viene distrutto, l'istanza 10 rimane in
vita perche'
'puntata ancora dalla collection. ora hai 10 istanze con 1 puntatore
ciascuna
For i = 10 to 1 Step -1
    Collezione.Remove i
Next
'tutti i 10 puntatori sono stati distrutti, e quindi anche le relative
istanze;
'arrivato qui sei "pulito"
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 vb mi tira già anche l'istanza creata precedentemente.
Beh, a parte quanto scritto da Luca Dormio, che è del tutto corretto, faccio
questa osservazione:
Di solito, le collection vengono 'popolate' all'interno di una sub o
function.
Cioè, la collection che, ad esempio, contiene i puntatori a tutti gli
elementi con cui l'applicativo deve dialogare, è definita Public o
quantomeno Private nel modulo/form.
La function che legge il file di configurazione, istanzia gli oggetti e li
appende alla collection, utilizzerà un puntatore temporaneo x valido solo
all'interno della function stessa.
Quindi, al termine della function, il puntatore x sarà distrutto
automaticamente, ma la collection sarà valida e tutte le istanze aggiunte
saranno vive.
A questo punto, basterà il remove per distruggere l'istanza, visto che x
sarà già sparito da un pezzo.
Ma, dicevo, è una cosa comune ma non universale. Devi vedere tu quali sono
gli scope delle variabili.
Ciao
Alberto

 mycollect.add x
E' la stessa cosa .. comunque ho visto che altri ti hanno fatto esempi più
significativi .. credo che ora sia chiaro ...
se hai bisogno facci un fischio.
Saluti

 ha scritto nel
messaggio news:L00Pa.1402$
sj6....@tornado.fastwebnet.it