Newsgroup: it.comp.lang.visual-basic
Titolo: puntatore a oggetto? vb2008

Ciao a tutti.
Un saluto a tutti voi!
Ho una domanda che mi assilla
Ho creato due oggetti: classe1 e classe2
Ho la necessità, dentro la classe 2 di accedere a delle proprietà della 
classe1 che devono sempre essere aggiornate.
Manipolo da di
Nella classe2, ho dichiarato una variabile di tipo classe1 e riesco ad 
accedere correttamente alle proprietà che mi servono.
Il problema è che tale proprietà dovrebbe essere sempre aggiornata 
all'ultimo valore che avro' in classe1 e
credo che potrei garantire ciò solo dichiarando un puntatore all'oggetto 
classe1 e non un oggetto nuovo come mi pare di aver fatto.
Esiste un modo di fare questo?
Un grosso grazie a chi mi darà un aiutino
Tortuga
PS
Ho una matrice di oggetti classe1 e una di classe2, quindi preferirei poter 
accedere dinamicamente 

 Esiste un modo di fare questo?
La *dichiarazione* non cambia, la tua variabile (chiamiamola X) è già
definita "As Classe1" e questo è sufficente, è gia un puntatore ad un
oggetto.
Quello che devi modificare è l'*assegnazione* di quella variabile; per
l'appunto non devi istanziare un nuovo oggetto, ma passare a Classe2
il riferimento corretto a Classe1
Puoi farlo in vari modi, rendendo pubblica X attraverso una routine
Property, oppure modificando il costruttore di Classe2 per fare in
modo che richieda sempre un parametro di tipo Classe1 e così via...
dipende più che altro dalla gerarchia che vuoi instaurare tra le
classi e se vuoi o meno che questo legame possa essere modificato più
volte sullo stesso oggetto.
Per esempio, se decidi che Classe2 non può operare in nessun caso
senza avere sempre l'oggetto Classe1 associato, e una volta assegnato
questo rimarrà sempre invariato fintanto che Classe2 è viva, allora
puoi seguire la strada del costruttore:
'in Classe2 definisci
Sub New (p As Classe1)
  If p Is Nothing Then
    'Non accettiamo riferimenti nulli
    Throw New ArgumentException
  Else
    X=p
  End If
End Sub
Non avendo definito nessun costruttore "liscio" (Sub New() senza
parametri) ti auto-imponi di fornire sempre il riferimento corretto...
a questo punto potrebbe essere una buona idea creare una funzione in
Classe1 che fornisce una nuova istanza di Classe2 già predisposta ad
usare la medesima istanza di Classe1
'in Classe1 definisci
Function GetClasse2() As Classe2
  'Me rappresenta l'istanza di classe su cui viene invocato questo
codice
  Return New Classe2(Me)
End Function
e quindi avresti:
Dim c1 As Classe1 = New Classe1
Dim c2 As Classe2 = c1.GetClasse2
dove c2 sta ora puntando a c1

 dove c2 sta ora puntando a c1
Oopps... mi sono espresso male qui, può essere interpretata malamente;
quello che intendevo è:
"dove la variabile X di c2 sta ora puntando a c1"

puoi seguire la strada del costruttore:
Ciao Luca.
Ti ringrazio infinitamente della risposta
Hai compreso in pieno il mio problema,
infatti non devo creare una nuova istanza di classe1 ma solo puntare ad 
essa.
Dentro a classe2 avevo previsto solo una variabile che puntava alla classe1.
Provo con una proprietà che nel Get si prenda sempre l'istanza corretta. ( 
che per fortuna so chi è)
GRAZIE ancora!
Tortuga


Ho fatto e funziona, passando attraverso una proprietą della classe2
Grazie grazie grazie!!!
Ciao
Tortuga