venerdì 27 marzo 2020

Illustrare al meglio la differenza tra value type e reference type

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.

Reference Types and Value Types – Finanza quantitativa

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,TimeSpansono 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

applicazione13

- Svolgere l' Esercizio 4  indicato nel video 49 (processo aleatorio + ordini e calcolo PNL) - Completare l' Esercizio 4  aggiungen...