Sei in: Per i Webmaster - Corso di ASP.NET - C# avanti tutta
Dopo una veloce introduzione agli elementi base del linguaggio, vediamo quali sono i tipi offerti da C# ed infine analizziamo alcuni elementi specifici della programmazione orientata agli oggetti. Alcuni concetti di questa lezione potranno risultare un po' ostici ai meno esperti, niente paura, anche ignorando questo capitolo sarà possibile andare avanti nella guida senza perdersi per la strada.
I tipi di C#
Uno dei vantaggi del framework .NET è l'interoperabilità tra i
linguaggi: ad esempio posso scrivere una applicazione per metà in C# e
per metà in Visual Basic. Questo ha come implicazione che il framework
ha un sistema di tipi comune, anche se ogni linguaggio usa delle
keywords diverse per esporre i tipi.
I tipi che abbiamo a disposizione in C# sono:
| Tipo | Dimensioni/Valori |
| bool | true o false |
| byte | Intero positivo tra 0 e 255 |
| sbyte | Intero tra -128 e 127 |
| char | Un qualsiasi carattere Unicode |
| DateTime | è uno struct che rappresenta data e ora dalle 12:00:00 AM, 1/1/0001 alle 11:59:59 PM, 12/31/9999 |
| decimal | Valore positivo e negativo con 28 digit |
| double | numero in virgola mobile a 64 bit |
| float | numero in virgola mobile a 32 bit |
| int | intero con segno a 32 bit (da -2.147.483.648 a 2.147.483.647) |
| uint | intero senza segno a 32 bit |
| long | intero con segno a 64 bit |
| ulong | intero senza segno a 64 bit |
| object | il tipo base da cui derivano tutti gli altri |
| short | intero con segno a 16 bit |
| string | una stringa di caratteri Unicode |
| TimeSpan | Un periodo di tempo positivo o negativo |
Suggeriamo di usare il tipo Decimal per calcoli finanziari e valutari. Attenzione, con C# è obbligatorio inizializzare le variabili prima dell'uso, se non lo si fa, il compilatore ci avvisa con un messaggio di errore.
Boxing e unboxing
Quando si esegue una conversione implicita di un tipo da e verso un tipo object si parla di boxing e unboxing. Se ad esempio scriviam:
object oPino = nPino;
Nella seconda riga abbiamo effettuato una operazione di boxing ossia il valore della variabile intera nPino è stato copiato nell'oggetto oPino. Da ora in poi i due valori sono indipendenti l'uno dall'altro.
Se invece vogliamo fare l'operazione inversa, ossia convertire un tipo object in un tipo per valore, bisogna indicare esplicitamente il tipo da estrarre dall'oggetto:
Classi, Metodi, Propietà
Vediamo brevemente come si definisce una classe in C#:
{
// qui ci va l'implementazione
}
dove al posto dell'attributo public ci possiamo mettere protected, internal, private, abstract o sealed a seconda dell'accessibilità che vogliamo dare alla classe.
In C# non c'è distinzione tra funzioni e procedure o sub come in altri linguaggi, esistono solo i Metodi, che possono o meno restituire dati in uscita.
Ecco un esempio di metodo che accetta in ingresso due double e restituisce in uscita un double che è la somma dei precedenti:
{
return nm1 + nm2;
}
Anche in questo caso, al posto dell'attributo public ci possiamo mettere altri attributi che riguardano l'accessibilità del metodo o la possibilità di ridefinirlo in una classe derivata (virtual, override).
Un metodo che non restituisce un risultato viene invece dichiarato come tipo void:
{
}
Vediamo adesso un esempio su come dichiarare le proprietà in C# tramite gli accessori get e set:
{
private int _ram1;
public int dimm1
{
get { return _ram1; }
set{ _ram1 = value; }
}
}
Se si implementano sia get sia set come nell'esempio, sarà possibile accedere alla proprietà sia in lettura sia in scrittura. Se invece se ne implementa solo una sarà consentita solo la lettura o solo la scrittura.
è anche possibile definire delle regole di convalida del valore per accettarlo solo se risponde a determinate caratteristiche.
