Newsgroup: it.comp.lang.visual-basic
Titolo: come avere un puntatore??

Ciao, ho un oggetto obj1 e una variabile dello stesso obj :  obj2.
Se faccio obj1=obj2 è come se puntassi allo stesso oggetto chiamandolo
con 2 nomi diversi.
Ho creato una form che ha un proprio dataset, binding source e
datatgridview in bindng.
me.periodBindingSource.DataMember = "Period";
me.periodBindingSource.DataSource = me.wincespitiDataSet;
this.wincespitiDataSet = module.global_wincespitiDataSet;
Sembra che il bindingsource continui a puntare al dataset della form,
quindi devo aggiungere la riga:
me.periodBindingSource.DataSource=module.global_wincespitiDataSet;
Non esiste un modo per evitare ciò? comunque non mi è chiaro questo
comportamento.
Qualche suggerimento?
Grazie

 
da come l'hai descritto, il giro sembra funzionare come deve.
se ho capito bene quello che hai scritto mi sa che non hai chiaro il 
funzionamento di puntatori & riferimenti.
Dim oggetto1 As Data.DataSet = New Data.DataSet("primo")
Dim oggetto2 As Data.DataSet = oggetto1
oggetto1 = New Data.DataSet("secondo")
Console.WriteLine("oggetto1: " & oggetto1.DataSetName)
Console.WriteLine("oggetto2: " & oggetto2.DataSetName)
Console.ReadLine()
a questo punto oggetto1 e oggetto2 sono diversi; oggetto2 e' "primo" e 
oggetto1 e' "secondo".
che poi e' quello che succede anche a te.
-- 
Paolo opg
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--

 funzionamento di puntatori & riferimenti.
Il tuo esempio mi è chiarissimo.....riprendendolo e applicandolo nel
mio caso ottengo:
Dim oggetto1 As Data.DataSet = New Data.DataSet("primo")
me.periodBindingSource.DataSource = oggetto1
dim oggetto2 = New Data.DataSet("secondo")
oggetto1=oggetto2
'mi aspetterei ora che bindingsource puntasse al dataset("secondo")
poichè il suo datasource è "oggetto1" che ora punta al datasource2.
'invece per riuscire a visualizzare i dati devo aggiungere questa riga
me.periodBindingSource.DataSource = oggetto2
perchè??

 
oggetto1 e' una variabile che contiene un riferimento all'oggetto che hai 
creato.
quando assegni il valore di oggetto1 a un'altra variabile (il datasource, 
nel tuo caso) fai una copia di questo riferimento.
quando cambi il contenuto di oggetto1 (ovvero metti nella variabile 
oggetto1 il riferimento a un'altra 'cosa') il datasource, che non puntava 
a oggetto1 ma al suo contenuto, resta invariato.
spiegazione spannometrica, ma spero renda l'idea...


'invece per riuscire a visualizzare i dati devo aggiungere questa riga
me.periodBindingSource.DataSource = oggetto2
perchč??
...
Tanto per fare una prova in base a quello che ti ha scritto Paolo, prova a 
riassegnare l'oggetto DataSource (ri)puntando su oggetto1
Cioe'
me.periodBindingSource.DataSource = oggetto1
Dato che, come giustamente dici, oggetto1 e' un riferimento ad oggetto2, 
anche in questo caso avrai il risultato che ti aspetti.

 perchč??
Per fare ulteriore chiarezza, immagina che una variabile oggetto contenga in 
realtą l'"indirizzo di memoria" (un numero int32) dell'istanza dell'oggetto 
a cui "punta".
Dim oggetto1 As Data.DataSet = New Data.DataSet("primo")
=> oggetto1 contiene l'indirizzo 0x10000000 (ad es.)
me.periodBindingSource.DataSource = oggetto1
=> me.periodBindingSource.DataSource contiene anch'esso 0x10000000
dim oggetto2 = New Data.DataSet("secondo")
=> oggetto2 contiene 0x20000000
oggetto1=oggetto2
=> oggetto1 contiene ora 0x20000000 MA me.periodBindingSource.DataSource 
continua ad essere 0x10000000...
Spero di averti chiarito le idee.
Bye
Raf 

 ha scritto nel messaggio 
news:i2s1c9$98v$1...@alix.livenet.it...
CUT
Grazie a  tutti per la risposta.
ora finalmente mi è chiaro anche se non sono convinto di questo 
funzionamento.
Come faccio la prossima volta a sapere se l'oggetto si comporterà come il 
datasource del bindingsource( quindi facendo una copia del riferimento) 
piuttosto che puntare direttamente al riferimento?
grazie 1000
 

 grazie 1000
In .NET un codice simile all'esempio di Rafunk, di qualunque oggetto
si parli, si comporterà sempre così...
'oggetto1=oggetto2' sovrascrive sempre e solo quel singolo puntatore,
non tutti gli altri riferimenti (il che, è bene ricordarlo, è vero
anche per il caso 'oggetto1=nothing')
L'accesso invece a qualunque *membro* di oggetto1 si riflette anche
sulle altre variabili che lo puntano, come ti aspetti.

 
premessa: un oggetto non punta da nessuna parte.
tu hai una variabile che contiene un riferimento all'oggetto.
questo riferimento (contenuto nella tua variabile) tu lo puoi solo 
copiare o eliminare.
dim miaVar as dataset = new dataset("test")
miaVar *NON E'* un oggetto, e' un riferimento al dataset "test"
dim pluto as dataset = miaVar
pluto adesso ha lo stesso valore di miaVar; miaVar era un riferimento al 
dataset "test" e adesso anche pluto contiene un riferimento a quel 
dataset.
miocontrollo.DataSource = miaVar
adesso l'origine dati del tuo controllo punta al dataset "test"
miaVar = nothing
adesso miaVar e' vuota; per arrivare al dataset "test" puoi pero' usare 
ancora pluto.
e il tuo controllo continua a funzionare, perche' contiene un riferimento 
al dataset "test"
che io sappia non hai modo di ottenere un riferimento a miaVar...
