Newsgroup: it.comp.lang.visual-basic
Titolo: [vb.net] Dim vs Shared

Non ho ben capito la differenza tra dichiarare una variabile a livello di 
classe con Dim o Shared
Cio�, se ho ben capito, se a livello di classe, cio� fuori da qualsiasi Sub 
interna alla classe, dichiaro:
Dim Pippo as String
Shared Pippo as String
la differenza TEORICA � questa:
---------------------------------------------------------------
"In una classe o struttura, la categoria di una variabile non locale dipende 
dal fatto che sia o meno condivisa. Se viene dichiarata con la parola chiave 
Shared, si tratta di una variabile condivisa, di cui esiste una copia unica 
condivisa tra tutte le istanze della classe o struttura. In caso contrario, 
si tratta di una variabile di istanza, della quale viene creata una copia 
distinta per ogni istanza della classe o struttura. Una copia specifica di 
una variabile di istanza � disponibile solo per l'istanza per la quale � 
stata creata"
---------------------------------------------------------------
Ma sia con Dim sia con Shared la variabile � "riconosciuta" in qualsiasi 
Sub, e se viene modificata in una Sub, qualora richiamata in un altra Sub il 
suo valore risulta effettivamente modificato anche se non dichiarata Shared.
Insomma, quale � la differenza pratica? A livello di classe come � meglio 
dichiarare uan variabile che deve essere disponibile a tutte le routines di 
quella Classe?

 Insomma, quale ï¿œ la differenza pratica?
Un membro Shared ï¿œ un membro statico (static in C#), al quale si puï¿œ 
accedere direttamente senza creare una istanza della classe. Al 
contrario per accedere a un membro non shared occorre istanziare una classe.
Se ho:
Public Class Prova1
     Public Shared CampoStatico As Integer
End Class
Posso fare:
Prova1.CampoStatico = 10
Se invece ho:
Public Class Prova2
     Public Campo As Integer
End Class
Devo fare:
Dim IstanzaProva2 As New Prova2
IstanzaProva2.Campo = 10
Ovviamente in questo caso posso avere quante istanze voglio, e ogni 
istanza avrï¿œ il suo membro personale. Invece se ï¿œ Shared ne posso avere 
solo uno.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3.0 Soluzioni a raccolta", molto piï¿œ di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 FAQ! 
http://it.openoffice.org/doc/manuali/
 

 nulla....
Perchï¿œ le stai usando all'interno della classe stessa (un form ï¿œ una 
classe), quindi non cambia nulla. Il form principale viene comunque 
istanziato all'avvio dell'applicazione.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3.0 Soluzioni a raccolta", molto piï¿œ di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/

 wrote:
fermo restando quanto spiegato dai colleghi
leggi
http://www.visual-basic.it/articoli/scNetClass1.htm
NON E' esaustivo ma mi pare di intuire che per la tua attuale
preparazione contribuisca a dissipare un po di nebbia!

 cambia proprio nulla?
Non si sceglie per questo, se hai una variabile che deve essere vista
indipendentemente dall'istanza la fai shared, altrimenti Dim.
I metodi shared sono quelli che non devi istanziare per poter usare.
Esempio hai una classe persona, con una funzione CombinaNome (Nome as
string, Cognome as string), non c'� bisogno che crei un oggetto persona
    Text1.text= Persona.CombinaNome("Mario", "Rossi")
Se non fosse shared avresti
    Dim p as new Persona
    p.Nome="Mario"
    p.Cognome="Rossi"
    Text1.Text=p.CombinaNome
Il primo "modo" � il normale funzionamento dei Moduli.