C# - I tipi in C#
C#
Tipi valore e tipi riferimento
Tipi valore
- I Tipi valore sono variabili che contengono direttamente gli oggetti con il valore assegnato.
- Esempio: sbyte, short, int, long, byte, ushort, uint, ulong, float, double, decimal, char, bool.
- Attenzione: la stringa non è un tipo valore ma un tipo riferimento.
- Sono memorizzati nello Stack (accesso veloce).
- Non possono assumere valore null.
- Al completamento dell'ambito di validità, il valore viene eliminato dallo stack.
Tipi riferimento
- I Tipi riferimento sono variabili che contengono l'indirizzo che indica la reale posizione del dato.
- Sono memorizzati nello heap (accesso lento).
- Possono assumere valore null.
- Al completamento dell'ambito di validità, il valore viene eliminato dallo heap dal Garbage Collection che però si attiva in modo asincrono e non è possibile forzarne l'attivazione.
Tipi puntatore
- Oltre ai tipi valore e ai tipi riferimento, esistono anche i puntatori.
- Sono utilizzabili solo con codice unsafe, senza il controllo della memoria da parte del CLR.
- Non sono molto utilizzati dai programmatori.
Conversione
- La conversione di una variabile da Tipo valore a Tipo riferimento si chiama Boxing; la variabile così convertita eredita tutte le proprietà e i metodi ereditati da ogni oggetto.
- La conversione di una variabile da Tipo riferimento a Tipo valore si chiama Unboxing.
- Esempio:
int numero1 = 42; // i è un Tipo valore
object oggetto = numero1; // (Boxing) o è un Tipo riferimento
int numero2 = (int)oggetto; // (Unboxing) j è un tipo valore
Il metodo GetType()
- Questo metodo restituisce il tipo di qualunque oggetto.
- Esempio:
int numero1 = 42;
Console.WriteLine(numero1.GetType()); // Restituisce System.Int32
- Questo operatore restituisce il tipo di qualunque tipo.
- Esempio:
Type t = typeof(int);
Console.WriteLine(t); // Restituisce System.Int32