Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

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

L'operatore typeof()
  • Questo operatore restituisce il tipo di qualunque tipo.
  • Esempio:

   Type t = typeof(int);
   Console.WriteLine(t);  // Restituisce System.Int32

Conversioni tra tipi


© 2020 Carlo Vecchio
Torna ai contenuti