Il tutorial completo per imparare C# da zero: il linguaggio moderno di Microsoft per app desktop, web (ASP.NET) e videogiochi con Unity. Esempi spiegati passo passo.
Introduzione a C# e .NET
C# (si pronuncia “C sharp”) è un linguaggio moderno, orientato agli oggetti, creato da Microsoft nel 2000. Gira sulla piattaforma .NET, che fornisce un'enorme libreria e permette di sviluppare applicazioni Windows, web (ASP.NET), mobile (MAUI) e videogiochi con il motore Unity.
C# unisce la potenza di C++ alla semplicità e sicurezza di linguaggi come Java: è fortemente tipizzato, ha la garbage collection automatica (gestione della memoria) ed è uno dei linguaggi più richiesti nel mondo del lavoro.
📌 C# non si esegue nel browser: serve il .NET SDK. In questo corso gli esempi si leggono e si modificano con la sintassi colorata.
Esempio
Sintassi e primo programma
Un programma C# è organizzato in classi e parte dal metodo Main. La direttiva using importa i namespace (qui System, che contiene Console). Le istruzioni terminano con ;.
Esempio
Output: Console.WriteLine
Console.WriteLine() stampa e va a capo; Console.Write() stampa senza andare a capo. Con le stringhe interpolate (prefisso $) inserisci variabili tra graffe.
Esempio
I commenti
Esempio
Le variabili
Ogni variabile va dichiarata con il suo tipo: tipo nome = valore;. La parola chiave var deduce il tipo automaticamente; const crea una costante.
Esempio
I tipi di dato
Tipo
Descrizione
Esempio
int
Intero
42
double
Decimale
3.14
char
Carattere
'A'
bool
Vero/falso
true
string
Testo
"ciao"
Il casting (conversione di tipo)
Si converte un tipo in un altro con il cast esplicito (tipo) o con i metodi Convert.ToInt32(), int.Parse(), .ToString().
Esempio
Gli operatori
Esempio
L'input dell'utente
Si legge dalla tastiera con Console.ReadLine() (restituisce sempre una stringa: converti se serve un numero).
Esempio
Math in C#
La classe Math fornisce funzioni matematiche e costanti.
Esempio
Le stringhe
La classe string offre molti metodi: .Length, .ToUpper(), .Substring(), .Replace(), .Contains().
Esempio
Booleans in C#
Il tipo bool assume i valori true o false. È il risultato di tutte le espressioni di confronto e la base delle condizioni.
Esempio
Le condizioni: if, else if, else
Esempio
Il costrutto switch
Esempio
Il ciclo while
Esempio
Il ciclo for e foreach
Esempio
Break e Continue
break interrompe il ciclo; continue salta all'iterazione successiva.
Esempio
Gli array
Esempio
Le List
La List<T> è una lista dinamica (a dimensione variabile) del namespace System.Collections.Generic.
Esempio
I metodi
Un metodo raggruppa codice riutilizzabile, con tipo di ritorno, nome e parametri. void = nessun ritorno; static = chiamabile senza creare un oggetto.
Esempio
Parametri dei metodi
I metodi ricevono dati tramite i parametri. C# supporta parametri di default, ref (per riferimento), out (valori in uscita) e params (numero variabile).
Esempio
Overloading dei metodi
C# permette più metodi con lo stesso nome ma parametri diversi (tipo o numero). Il compilatore sceglie quello giusto in base agli argomenti.
Esempio
Programmazione a oggetti (OOP)
C# è interamente orientato agli oggetti. Tutto è organizzato in classi e oggetti; i pilastri sono incapsulamento, ereditarietà, polimorfismo e astrazione.
📦 Una classe è lo “stampo”, gli oggetti sono i prodotti creati da quello stampo.
Classi e oggetti
Una classe definisce attributi e metodi. Con new si crea un oggetto.
Esempio
Membri di classe
I membri di una classe sono i campi (variabili), i metodi (funzioni) e le proprietà. I membri static appartengono alla classe, non alle singole istanze.
Esempio
Le proprietà
Le proprietà sono il modo elegante di C# per l'incapsulamento: combinano un campo privato con un getter e un setter, con la sintassi compatta { get; set; }.
Esempio
Modificatori d'accesso
I modificatori d'accesso controllano la visibilità di classi e membri.
Modificatore
Accessibile da
public
Ovunque
private
Solo dalla classe stessa (default)
protected
Dalla classe e dalle derivate
internal
Dallo stesso assembly (progetto)
Esempio
I costruttori
Il costruttore ha lo stesso nome della classe e inizializza l'oggetto. this indica l'oggetto corrente.
Esempio
L'ereditarietà
Una classe eredita da un'altra con i due punti :. base richiama il genitore.
Esempio
Il polimorfismo
Con virtual (genitore) e override (figlia) una sottoclasse ridefinisce il comportamento di un metodo.
Esempio
Astrazione (classi astratte)
L'astrazione nasconde i dettagli implementativi ed espone solo l'essenziale. Una abstract class non può essere istanziata e può contenere metodi astratti (senza corpo) che le classi derivate devono implementare.
Esempio
📌 Una classe astratta può avere sia metodi astratti (da implementare) sia metodi concreti (già implementati). Non può essere istanziata direttamente.
Le interfacce
Un'interfaccia definisce un contratto di metodi che le classi devono implementare. Per convenzione il nome inizia con la “I”.
Esempio
Enum
Un enum definisce un insieme di costanti con nomi leggibili. Utile per stati, giorni, livelli e categorie.
Esempio
Gestione file in C#
La classe File (namespace System.IO) permette di creare, scrivere e leggere file con metodi statici molto semplici.
Scrivere e leggere
Metodo
Descrizione
File.WriteAllText()
Scrive (sovrascrive) testo
File.AppendAllText()
Aggiunge testo in coda
File.ReadAllText()
Legge tutto il contenuto
File.ReadAllLines()
Legge le righe in un array
File.Exists()
Verifica se il file esiste
File.Delete()
Elimina il file
La gestione delle eccezioni
Gli errori a runtime si gestiscono con try ... catch (e l'opzionale finally), per evitare il crash del programma.
Esempio
Esempi pratici C#
Esempi reali e completi per consolidare C# con OOP e collezioni.
Gestione voti con List
Esempio
Classe ContoBancario
Esempio
Editor online C#
Scrivi e leggi codice C# con la sintassi colorata. Per eseguirlo installa il .NET SDK (o usa .NET Fiddle), crea un progetto con dotnet new console ed esegui con dotnet run.
Il tuo codice C#
Quiz C# — verifica le tue conoscenze
Cos'è il .NET? Risposta: Una piattaforma di sviluppo open source di Microsoft che esegue C#. Comprende il runtime (CLR), le librerie di base e gli strumenti di compilazione.
Differenza tra == ed .Equals() per le stringhe? Risposta: Per le stringhe in C# entrambi confrontano il contenuto. Per gli oggetti, == confronta i riferimenti se non è sovrascritto.
Cosa sono le proprietà (properties)? Risposta: Membri che combinano un campo con i metodi get e set, permettendo accesso controllato con sintassi da campo.
Differenza tra classe astratta e interfaccia? Risposta: La classe astratta può avere implementazioni e stato; l'interfaccia definisce solo contratti. Una classe eredita da una sola classe ma implementa più interfacce.
Cos'è il garbage collector? Risposta: Il componente del CLR che libera automaticamente la memoria degli oggetti non più referenziati, evitando i memory leak.
Esercizi C# con soluzioni
Cinque esercizi con soluzione completa. Provaci prima di guardare!
Esercizio 1 — FizzBuzz
Soluzione
Esercizio 2 — Numero primo
Soluzione
Esercizio 3 — Inversione stringa
Soluzione
Esercizio 4 — Classe Studente
Soluzione
Esercizio 5 — Conta parole con Dictionary
Soluzione
Sfide C#
🟢 Crea una classe Temperatura con proprietà per Celsius e Fahrenheit che si convertono automaticamente.
🟡 Implementa una rubrica con Dictionary e menu console (aggiungi, cerca, elimina contatti).
🟡 Realizza una gerarchia Veicolo → Auto/Moto/Camion con metodo virtuale e polimorfismo.
🔴 Crea un'interfaccia IForma con metodo Area() implementata da Cerchio, Rettangolo e Triangolo, e usa LINQ per trovare la più grande.
🔴 Implementa un sistema di gestione biblioteca con classi, eccezioni custom e salvataggio su file.
Progetti pratici con C#
🎮 Gioco con Unity: C# è il linguaggio ufficiale del motore Unity
🖥️ App desktop WPF/WinForms: interfacce grafiche con .NET
🌐 Web API con ASP.NET Core: backend REST moderno e performante
🏦 Gestionale console: magazzino o banca con OOP e persistenza file
📊 Analisi dati con LINQ: lettura CSV, statistiche e query fluenti
🤖 Bot Discord/Telegram: integrazione API con C# e .NET
Programma completo del corso C#
Modulo
Argomenti
Ore
1 — Basi
Installazione .NET SDK, Console, variabili, tipi, casting, operatori, math
6
2 — Controllo
Booleans, if/else, switch, while, for, break/continue
4
3 — Collezioni
Array, List, stringhe
4
4 — Metodi
Metodi, parametri, overloading
5
5 — OOP base
Classi, membri, costruttori, modificatori, proprietà
💬 Differenza tra class e struct? — Le classi sono reference type (allocate sull'heap); le struct sono value type (sullo stack). Le struct si copiano per valore.
💬 Cos'è il boxing/unboxing? — Boxing converte un value type in object (heap); unboxing fa il contrario. Operazioni costose da evitare nei loop.
💬 Cosa sono i delegate? — Tipi che rappresentano riferimenti a metodi, base per eventi e callback (simili ai puntatori a funzione).
💬 Cos'è LINQ? — Language Integrated Query: permette di interrogare collezioni, database e XML con sintassi fluente e leggibile.
💬 Differenza tra IEnumerable e List? — IEnumerable è l'interfaccia base per l'iterazione (lazy); List è una collezione concreta con accesso casuale.
💬 Cosa fa async/await? — Permette la programmazione asincrona non bloccante, fondamentale per operazioni I/O e web.
Riepilogo C#
✅ Sintassi: Console, variabili, tipi, casting, operatori, math
✅ Controllo: booleans, if/else, switch, while, for, break/continue
✅ Collezioni: array, List, stringhe
✅ Metodi: parametri, overloading, valori di ritorno
✅ OOP: classi, membri, costruttori, modificatori, proprietà (get/set)
✅ File ed errori: lettura/scrittura file, eccezioni try/catch/finally
📌 C# è il linguaggio di Unity (videogiochi), delle app aziendali Windows e del backend con ASP.NET Core. Padroneggiarlo apre le porte a ruoli da C# Developer, Game Developer e .NET Developer.
Riferimento — Parole chiave C#
Keyword
Uso
class, struct, interface
Definiscono tipi
public, private, protected, internal
Modificatori d'accesso
static
Membro di classe (non di istanza)
abstract, virtual, override, sealed
Polimorfismo ed ereditarietà
get, set
Accessori delle proprietà
new
Crea un'istanza
this, base
Istanza corrente / classe base
using
Importa namespace / gestione risorse
namespace
Raggruppa tipi correlati
try, catch, finally, throw
Gestione eccezioni
var
Tipo dedotto automaticamente
async, await
Programmazione asincrona
Riferimento — Metodi String
Metodo
Descrizione
Esempio
Length
Lunghezza
"C#".Length → 2
ToUpper() / ToLower()
Maiuscolo / minuscolo
"c#".ToUpper() → "C#"
Trim()
Rimuove spazi ai lati
" hi ".Trim() → "hi"
Substring(i, n)
Sottostringa
"Csharp".Substring(0,1) → "C"
Replace(a, b)
Sostituisce
"aaa".Replace("a","b") → "bbb"
Contains(s)
Contiene?
"C#".Contains("#") → true
IndexOf(s)
Posizione
"Csharp".IndexOf("s") → 1
Split(c)
Divide in array
"a,b".Split(',') → ["a","b"]
StartsWith/EndsWith
Inizia/finisce con?
"C#".StartsWith("C") → true
string.Join()
Unisce con separatore
string.Join("-", arr)
string.Format() / $""
Interpolazione
$"Ciao {nome}"
Riferimento — Metodi Math
Metodo
Descrizione
Esempio
Math.Abs()
Valore assoluto
Math.Abs(-5) → 5
Math.Max() / Min()
Massimo / minimo
Math.Max(3,7) → 7
Math.Pow()
Potenza
Math.Pow(2,10) → 1024
Math.Sqrt()
Radice quadrata
Math.Sqrt(16) → 4
Math.Round()
Arrotonda
Math.Round(3.5) → 4
Math.Floor() / Ceiling()
Difetto / eccesso
Math.Floor(4.9) → 4
Math.PI
Pi greco
Math.PI → 3.14159
Math.Sin/Cos/Tan()
Trigonometria
Math.Sin(0) → 0
new Random().Next()
Numero casuale
rnd.Next(1, 100)
Riferimento — Metodi List
Metodo
Descrizione
Add(x)
Aggiunge un elemento
AddRange(c)
Aggiunge più elementi
Remove(x) / RemoveAt(i)
Rimuove per valore / indice
Count
Numero di elementi
Contains(x)
Verifica presenza
IndexOf(x)
Posizione di un elemento
Sort()
Ordina la lista
Reverse()
Inverte l'ordine
Clear()
Svuota la lista
Find() / FindAll()
Cerca con un predicato
Average() / Max() / Min() / Sum()
Statistiche (LINQ)
Where() / Select()
Filtra / trasforma (LINQ)
Certificazione C#
Microsoft offre certificazioni ufficiali apprezzate dalle aziende che sviluppano in .NET:
💻 Pratica con progetti reali: console, WPF, ASP.NET Core, Unity
🛠️ Impara Visual Studio / VS Code e il .NET CLI
📖 Approfondisci LINQ, async/await e i pattern OOP
⏱️ La certificazione gratuita "Foundational C#" è un ottimo punto di partenza
Conclusione — E ora?
Hai completato il corso di C#! Hai imparato la sintassi, l'OOP completa (classi, proprietà, ereditarietà, polimorfismo, astrazione, interfacce), gli enum, i file e la gestione delle eccezioni. Sei pronto per costruire applicazioni reali con .NET.
E ora cosa fare?
💻 Installa il .NET SDK e Visual Studio (o VS Code) per sviluppare in locale
🎮 Prova Unity — C# è il linguaggio ufficiale per creare videogiochi
🌐 Studia ASP.NET Core per il backend web e le Web API
📖 Approfondisci LINQ e async/await, fondamentali nel C# moderno
🐙 Pubblica i progetti su GitHub per il tuo portfolio
🎯 Punta alla certificazione Microsoft (gratuita "Foundational C#")
🎯 La tua sfida finale
Realizza un'applicazione console che gestisce un elenco di studenti (nome e voti) con classi e proprietà. Calcola la media della classe, mostra chi è promosso, ordina per media con LINQ e salva i risultati in un file di testo.