Newsgroup: it.comp.lang.visual-basic
Titolo: Oggetti propagati tra classi in una DLL ActiveX ?

 dovrebbe essere un problema, o sbaglio?
L'unico problema è che se dichiari una variabile Public a livello di modulo
BAS in una DLL Apartment Threaded, tutte le istanze create dallo stesso
thread condivideranno la stessa variabile. In altre parole, se in un tuo
eseguibile crei due istanze della dll per due diverse connessioni, la
seconda istanza andrà a sovrapporsi alla prima. Se vuoi evitare questo
inconveniente e usare comunque una dichiarazione globale, forse ti
converrebbe usare una collection e una key passata come argomento (che poi
pesa come un puntatore, quindi non so se ci sia un guadagno, oltre alla
rottura di gestire la collection). L'unico espediente che eviterei è quello
di creare link fra le classi (tipo: ogni classe ha un puntatore al padre).
----------------------------------------------------------------
Stefano Minardi
zet...@mclink.it
----------------------------------------------------------------

 
Io farei così:
1) tengo privato l'oggetto connection della classe principale.
2) Creo, nelle classi secondarie, un ADODB.Connection (non un oggetto: 
private Conn as ADODB.Connection), più un metodo pubblico SetConn fatto 
così:
public sub SetConn(theConn as AdoDB.Connection)
set conn=theConn
end sub
in alternativa puoi usare una public property Set, senza property Get. 
Avresti una proprietà write-only.
3) dalla classe principale, chiami il metodo SetConn di tutte le classi 
figlie e passi così il riferimento, mantenendo tutto privato. Eviti 
quindi il terribile inconveniente di cui parla Stefano Minardi.
per "pulizia", potresti creare una interface che esponga il metodo 
SetConn, ma non so se te ne vale la pena.
Se hai classi figlie di figlie, puoi comunque passare il riferimento che 
si trova in una classe figlia nelle sue classi sottostanti.
Rileggendo il tuo post, questo mi sembra alquanto simile a quello che fai 
tu adesso. Mi sa che ho sprecato tempo e parole :( 
Però, riguardo a quello che propone Stefano, circa una proprietà Parent: 
non è male, ho fatto spesso cose simili. Se però vuoi tenere tutto 
nascosto, forse non è il massimo, perché per fare questo dovresti mettere 
una Public Property Get nella classe principale che ti dia accesso alla 
connessione. Il che vorrebbe anche dire che il compilatore (ehm) deve 
andare a leggere una proprietà di un'altra classe (a cui accedi 
richiamanto un tot di altre proprietà Parent...) invece di leggere un 
attributo interno di ogni classe: leggere la proprietà e MOOOLTO + lento. 
Se non ha problemi di memoria (e tieni conto che crearti un puro 
riferimento ad un ADODB.Connection non occuperà molto, essendo simile ad 
un puntatore...) e non ti fai problemi a duplicare pochissimo codice (la 
proprietà o il metodo SetConn), credo che la soluzione più performante 
sia tenere l'attributo in ogni classe, cosa che ti consente anche di 
tenere tutto privato. Anche perchè, a livello di memoria, per contro 
avresti in ogni classe un riferimento (alla classe principale o alla 
classe di livello superiore), che occuperà un qtà di memoria simile a un 
riferimento alla connection. Quindi...
Ho una domanda: perchè le classi secondarie le tieni PublicNotCreatable 
(è una domanda non una critica eh!!) 
ciao!
--
Gio_F - mailto:
jg...@tiscalinet.it


Perfettamente d'accordo.


 
e di che... se c'è uno scambio proficuo di idee... ben vengano queste 
discussioni!


 
:) prego, e grazie anche a te!
-- 


 (l'entry-point della libreria).
perfetto, credo che sostanzialmente cosģ non ci siano problemi di sorta.
Ciao!






Non sono beta-tester Microsoft, tutto cio' che so l'ho letto sui newsgroups
ed in particolare sul sito Microsoft, non ricordo l'URL diretto, ma dovrebbe
esserci tutto nella sezione developers, sotto "visual studio next
generation" o qualcosa di simile.


 generation" o qualcosa di simile.
grazie appena ho un po' di tempo do' un'occhiata...
