Premessa
Sostanzialmente tutti i tipi di dati che sono preesistenti all'interno di un linguaggio o che possono essere definiti dall'utente, sono di due tipi:
1) Value Type → "Tipo valore"→ per strutture piccole
2) Reference Type → "Tipo di riferimento → per strutture grandi.
Qual'è la differenza tra questi due tipi di dati?
Il tipo Value Type è un tipo di dato in cui la variabile stesse rappresenta direttamente la locazione di memoria del dato. La variabile immagazzina direttamente il dato stesso.
Il tipo Reference Type la variabile rappresenta semplicemente un puntatore al dato e non immagazzina il dato stesso.

Perché si fa questa distinzione?
Perché in certi casi i dati da immagazzinare sono talmente vasti e complessi, che è necessario utilizzare un riferimento per poterli manipolare, perché non si posso spostare tutti quei dati!. Mentre per strutture più piccole di dati, il programmatore utilizza il tipo Value Type e sono :
DateTime, Boolean,Integer,Double,Decimal,TimeSpan →sono ValueType
Si tratta di entità piccole, cioè di frammenti limitati di dati che possono essere trattati per valori. Cosa diversa per esempio è per lo StringBuilder che potrebbe rappresentare anche una stringa lunghissima. Per esempio potrebbe contenere tutta la bibbia, se assegnassi ad una variabile questo StringBuilder, e lo passassi come parametro per una funzione, non posso fare ogni volta la copia di tutta la bibbia e passarlo all'interno del programma,e quindi si passa solamente il riferimento alla classe. Lo stesso vale per le stringhe che vengono trattate per riferimento.Vediamo come creare nuovi tipi :
Anche in questo caso si possono si possono creare dei ValueType o ReferenceType. Per quanto riguarda la creazione di quest'ultimi citati si utilizza la parola chiave Class che ci dà la possibilità di creare dei nuovi tipi che vediamo appunto come ReferenceType. Se invece volessi creare nuovi tipi ma ValueType utilizzeremo la parola chiave Structure.
Quando utilizziamo la parola chiave Class → il programma lavora su un riferimento a questa struttura.
Invece quando utilizziamo la parola chiave Structure → stiamo manipolando direttamente la struttura dei dati.
Conclusione
Di solito utilizziamo e creiamo delle classi, il ReferenceType è più utile ai nostri fini, in quanto consente di immagazzinare delle strutture di dati vaste e complesse. Cosa che non è possibile fare con le strutture. Quest'ultime essendo passate per valore devono essere strutture molto leggere, piccole e limitate. Il ValueType nel momento che vado a fare una assegnazione,ad esempio assegno una ValueType ad una nuova variabile, la vecchia variabile viene copiata nella nuova. Tutti i cambi che stanno dentro la struttura vengono copiati nella nuova variabile assegnata.
Invece per quanto riguarda la classe ReferenceType, non vengono copiati tutti i valori e tutti i campi della classe, ma viene semplicemente creato un nuovo puntatore alla stessa struttura di dati. Quindi quando noi assegniamo ad una classe una nuova variabile di tipo ReferenceType, non è che vengono copiati tutti i singoli campi, ma semplicemente copiato il puntatore. Questo fa si che possiamo maneggiare vastissime classi con migliaia di proprietà,senza andare ad ostacolare quelle che sono le prestazioni del programma.
Nessun commento:
Posta un commento