Newsgroup: it.comp.lang.visual-basic
Titolo: Precedenza di eventi nelle classi

in VB6 (specifico, perché qui ultimamente si mischiano i post dei 2
linguaggi) :
se in una classe (myClass) metto: in Class_Initialize-->  Msgbox "Istanza
Creata"  e in Class_Terminate -->MsgBox "Istanza Rimossa"
Dim p as myClass
Set p = New myClass  ' ---> elabora l' evento Class_Initialize()
..
..
Set p = New myClass  ' ---> elabora l' evento Class_Initialize() e poi
Class_Terminate()
C'è una spiegazione a questa vb.pacchianata?
la logica direbbe che alla creazione della seconda istanza, prima chiude
quella attiva e poi inzializza la nuova..
invece sembra che VB prima inizializzi la nuova istanza poi distrugga
l'oggetto precedente, e se uso variabili pubbliche non posso controllare la
corretta sequenza di entrata/uscita nelle nuove istanze.
Fabio

 C'č una spiegazione a questa vb.pacchianata?
Certo:
Set p = New myClass
Istanzi una botta della classe MyClass, e ne tieni traccia attraverso il
puntatore p
Set p = New myClass
Istanzi una nuova botta della classe MyClass, e ne tieni traccia attraverso
il puntatore p.
Ma, allora, la prima botta, da chi č puntata????
Da nessuno???
Allora distruggiamola!!!
Class_Terminate
E' proprio il fatto che la seconda Initialize sia andata a buon fine, che
rende la prima istanza 'flottante', ossia non piů collegata a niente, per
cui viene marcata per cancellazione.
Ciao
Alberto


Pessimo meccanismo, ma grazie :)
--
Fabio Guerrazzi
http://www.sourcecode4free.com/cgt
fab...@libero.it

accidenti a me, vedi la fretta di scrivere..:)
Set myClass= Nothing scassa ogni cosa con relativo scaturimento del
Terminate.
sarebbe  stato comunque più omogeneo e più intuitivo se 'New' verificasse
anche se c'era un'altra istanza sullo stesso puntatore in precedenza.
Fabio.

 Pessimo meccanismo, ma grazie :)
Il meccanismo č ottimo, e soprattutto č logico.
Ancora meglio: il meccanismo risponde al concetto di programmazione Object
Oriented, che ritengo debba essere studiata bene prima di intraprendere lo
sviluppo.
E' pessimo, invece, il modo di sviluppare lasciando che gli oggetti vengano
distrutti in maniera implicita.
Se ritieni che una cosa debba avvenire prima di un'altra, č buona norma
esplicitare le cose.
Ciao
Alberto

 Tipo Set p = Nothing ?
Ho visto il tuo post dopo aver premuto Invia.
Ciao
Alberto

 Pessimo meccanismo, ma grazie :)
Mi sembra coerente con il resto della sintassi; se esegui y = F(x) viene
prima valutata la funzione, poi assegnato il risultato a y, e qui per
l'appunto viene prima valutato il costruttore. VB non puo' sapere che la
prima istanza non e' piu' puntata da nessuno fintanto che p non viene
sovrascritta...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 anche se c'era un'altra istanza sullo stesso puntatore in precedenza.
Perchè?
Io ad esempio faccio spesso il Set p=New Classe, anche se p punta già a
qualcosa.
Solo che prima di farlo, ho già legato l'oggetto ad un'altra variabile, ad
esempio un array, del tipo Set Pippo(4)=p, per cui il new mi crea una nuova
istanza, ma non voglio che distrugga il precedente, che anzichè diventare
flottante rimarrà legato a qualcosa d'altro, e quindi non distrutto.
E' il motivo dei post frequenti del tipo "Perchè mi resta aperto Excel?".
Ciao
Alberto

Problema risolto. Le risposte che hai dato sono soddisfacenti :)
--
Fabio Guerrazzi
http://www.sourcecode4free.com/cgt
fab...@libero.it
(non andare sul sito oggi perché sembra che il mio server sia discretamente
down) !

 esempio un array, del tipo Set Pippo(4)=p,
set pippo(4) ha una locazione di memoria diversa da pippo(1) o da 'p'
io intendevo che si accorgesse che p con varptr(p)=282819782 se identico al
precedente prima chiude poi riapre..

 buona norma esplicitare le cose.
Come sopra...
Ciao.
--
BSD is for UNIX-lovers -- linux is for Windows-haters.