Newsgroup: it.comp.lang.visual-basic
Titolo: Ottenere l'elenco delle istanze di una classe

Immagino sia facile, ma... non per me :-(
Set Oggetto1 = New MiaClasse
Set Oggetto2 = New MiaClasse
Mi trovo nella necessità di ottenere in RunTime l'elenco delle
istanze di "MiaClasse" che ho creato, cioè "Oggetto1" e
"Oggetto2", si può fare?

"Oggetto2", si può fare?
In altri linguaggi potresti usare proprieta' statiche della classe,
in vb l' unico modo che conosco e' usare una variabile contatore
in un modulo .bas (sigh!).
Questa tecnica funziona anche se le classi si trovano in una
dll activex.
-- 
hth, hal

Questo ti piacerà di sicuro:
puoi otenere molto sfruttando una collezione 
in cui aggiungere i tuoi oggetti per tenerne traccia
Il codice che segue sta in un form con tre commandbutton
Ho aggiunyto al progetto un modulo di classe che ha
un solo metodo: una funzione pubblica (ciao) che restituisce una stringa
Buon divertimento 
Cesare Imperiali
Option Explicit
Private obj As Class1
Private myCollection As Collection
Private Sub Form_Load()
'Istanzia la collezione
Set myCollection = New Collection
End Sub
Private Sub Form_Unload(Cancel As Integer)
'quando chiudi, pulisci
Do While myCollection.Count > 0
   myCollection.Remove (myCollection.Count)
Loop
If Not obj Is Nothing Then
   Set obj = Nothing
End If
End Sub
Private Sub Command1_Click()
'crea una nuova istanza
Set obj = New Class1
'aggiungila alla collezione
myCollection.Add obj
End Sub
Private Sub Command2_Click()
'togli un'istanza dalla collezione
If myCollection.Count > 0 Then
   myCollection.Remove (myCollection.Count)
Else
   'se non ne hai più
   If Not obj Is Nothing Then
      Set obj = Nothing
   End If
End If
End Sub
Private Sub Command3_Click()
'mostra quante istanze hai
MsgBox myCollection.Count
End Sub
Private Sub Command4_Click()
 If myCollection.Count > 0 Then
   'la mia classe ha un metodo
   'che è una funzione pubblica e rende una stringa
   'che posso mostrare in una messageBox
   MsgBox obj.ciao
   'o puoi chiamare il metodo direttamente
   'dall'elemento della collezione che vuoi:
   MsgBox myCollection(myCollection.Count).ciao
 End If
End Sub

 wrote in message
news:Y9Ms8.10110$SR5.2...@twister1.libero.it...

non "a gratis", cioè senza l'aggiunta di alcun codice opportuno;
ammetto che sarebbe bello, ma purtroppo non è possibile
(e, aggiungo io, sarebbe anche bello, almeno in fase di debug, vedere _chi_
sta referenziando un determinato oggetto.... )
ciao

 in cui aggiungere i tuoi oggetti per tenerne traccia
:-O
Grazie!

 in un modulo .bas (sigh!).
Ma č possibile che all'interno di una routine di una classe si
ricavi in qualche modo il nome del riferimento all'istanza?
Cioč, se io istanzio:
Set Oggetto1 = New MiaClasse
Da una Sub interna a MiaClasse c'č modo di ricavare "Oggetto1"?

Da una Sub interna a MiaClasse c'č modo di ricavare "Oggetto1"?
"Oggetto1" e' il nome che dai nel codice alla variabile, ma il compilato
non sa come tu l' abbia chiamato.
Quando si decompila un eseguibile non si riesce a risalire ai nomi dati
nel sorgente, a meno che la compilazione non sia stata fatta con i debug
symbols (ed occorre comunque avere il file di decodifica dei simboli).
Tenuto conto che in vb6 la reflection e' un sogno proibito :-(,
penso che potresti ovviare in qualche modo creando un' apposita
proprieta' Name. Tale proprieta' deve essere valorizzata da chi istanzia l' oggetto,
e sperare che lo faccia perche' non ti puoi scrivere il tuo costruttore :-(
-- 
ciao, hal