[70-536] Reference Types

Lesson 2

Reference Types

Chiaro e tondo, un reference type è diverso dal value type perchè viene memorizzato sullo stack il puntatore all'area di memoria dove è contenuto il valore da memorizzare. Il valore viene memorizzato nell'heap. Una copia di reference type comporta una copia del puntatore.

L'heap "subisce" un processo chiamato Garbage Collection per la pulizia dei valori non più utilizzati.

Sono reference type le stringhe, i tipi derivanti da Object ad eccezione dei value types, array, stream, StringBuilder ed Exception, oltre ad altri circa 2500 tipi.

Occhio alle stringhe che sono immutabili e come tali la concatenazione fatta in modo classico comporta la creazione di molte variabili. Per ottimizzare questo processo occorre far uso dei metodi specifici delle stringhe o di StringBuilder, mai il +=.

Anche gli array possiedono dei metodi specifici e quindi raramente bisognerà implementare le operazioni base.

Gli stream derivano da System.IO.Stream (ma sono presenti altri anche in System.Network.Socket e System.Security.Criptography). FileStream e MemoryStream i più utilizzati per operazioni su file e memoria rispettivamente.

Nulla da aggiungere sulle Exception: solita solfa su Try-Catch-Finally con particolare attenzione a "catchare" le eccezioni partendo da quelle più specifiche e passando via via a quelle più generiche.

 


Technorati tags:

[70-536] Value Types

Lesson 1

Value Types

I value types costituiscono il più semplice dato del Framework e derivano da System.Object come tutti i tipi di dato in .Net. Vengono allocati nello stack e per questo sono molto efficienti. Contengono il dato a differenza dei reference types.

Sono di tre tipi:

  • Built in value types
  • User defined value types
  • Enumerations

I primi sono i tipi di base come byte, int (entrambi anche unsigned), int16-32-64, single, double e decimal. I più diffusi vista l'ottimizzazione presente sono gli int32 e i double. A questi si aggiungono char, boolean, datetime e intptr (puntatori).

Primo errore sul libro (pag. 5): il tipo Boolean occupa 1 byte e non 4 bytes!

In caso di assegnamenti tra variabili value types viene effettuata una copia del valore.

A questi dati dal Framework 2.0 si aggiungono i relativi Nullable definiti come

Nullable<bool> b = null;

 o

bool? b = null;

con notazione abbreviata (in C#).

I secondi sono i dati di tipo struct, ovvero composizioni di value types, molto semplici (in genere sotto i 16 bytes) come Point. Non devono essere castabili a Reference Types e non cambiano dopo la creazione.

I terzi permettono di utilizzare delle parole al posto degli int e definiscono quindi degli insiemi di possibilità.


Technorati tags: