Menu

Cos'è C#? Il linguaggio, .NET, le versioni e un primo programma

C# è un linguaggio di uso generale a tipizzazione statica, creato da Microsoft, che gira su .NET. A cosa serve, che rapporto ha con .NET, cosa ha aggiunto ogni versione e come è fatto un programma in C#.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

C# (si pronuncia "C sharp") è un linguaggio di programmazione di uso generale progettato in Microsoft da un team guidato da Anders Hejlsberg, pubblicato per la prima volta nel 2002. È a tipizzazione statica (ogni variabile ha un tipo che il compilatore controlla prima che il programma venga eseguito), orientato agli oggetti (il codice è organizzato in classi) e gestito (un garbage collector libera la memoria al posto tuo). Il C# moderno prende molto anche dalla programmazione funzionale: lambda, query LINQ, pattern matching e record immutabili.

Ecco un programma C# completo. Premi Esegui:

Output:

Hello, Ada! It is 2026.

A cosa serve C#

C# è un linguaggio di uso generale, quindi si trova nella maggior parte dei tipi di software, ma alcune aree ne rappresentano la parte più grande:

  • Giochi. Unity, uno dei motori di gioco più usati, si programma in C#. Anche Godot lo supporta.
  • Backend web. ASP.NET Core è il framework web di .NET per API, siti web e app in tempo reale. Nei benchmark pubblici è uno dei framework web mainstream più veloci.
  • App desktop. WPF e Windows Forms su Windows, .NET MAUI e Avalonia su più piattaforme.
  • Cloud e servizi. Azure Functions, worker in background, microservizi in container.
  • Strumenti e automazione. Strumenti da riga di comando, script di build, elaborazione di dati.

È particolarmente diffuso nelle grandi aziende che lavorano con la tecnologia Microsoft e negli studi di videogiochi. Le app mobili si possono fare con .NET MAUI (il successore di Xamarin), ma è una nicchia più piccola rispetto a Kotlin o Swift.

C# e .NET non sono la stessa cosa

C# è il linguaggio. .NET è la piattaforma che lo esegue, ed è composta da tre parti:

  1. Il runtime (CLR). Il compilatore C# non produce codice macchina. Produce Intermediate Language (IL), memorizzato in file .dll o .exe. Quando il programma gira, il Common Language Runtime compila quell'IL in codice nativo al momento (JIT), gestisce la memoria con un garbage collector e fa rispettare la sicurezza dei tipi.
  2. La libreria di classi di base. Collezioni, accesso ai file, rete, testo, date, thread: tutto ciò che sta sotto System.*.
  3. L'SDK. Il comando dotnet che crea, compila, testa ed esegue i progetti.

Altri linguaggi vengono compilati nello stesso IL (F#, Visual Basic), ed è per questo che un programma C# può usare una libreria scritta in F#.

Esistono due generazioni della piattaforma. .NET Framework (dalla 1.0 del 2002 alla 4.8.1) funziona solo su Windows e fa ancora girare molte applicazioni più vecchie. .NET (chiamato .NET Core fino alla versione 5) è il successore open source e multipiattaforma che gira su Windows, Linux e macOS. I progetti nuovi puntano a .NET; le versioni pari come .NET 8 e .NET 10 ricevono tre anni di supporto a lungo termine.

Come è fatto un programma C#

Un programma C# è formato da tipi (classi, struct, interfacce, enum, record) che contengono membri (campi, proprietà, metodi). L'esecuzione parte da un metodo statico chiamato Main. I namespace raggruppano i tipi collegati, e le direttive using ti permettono di riferirti a essi con nomi brevi.

Output:

Maya: 21.00
Leo: 13.00

Alcune cose sono già visibili: Order è una classe con due proprietà (Customer, Total), un costruttore e un metodo. decimal è il tipo per il denaro, e il suffisso m indica un letterale decimal. var lascia che il compilatore deduca il tipo di una variabile locale, e List<Order> è una collezione generica che accetta solo oggetti Order. Il {order.Total:F2} dentro $"..." formatta un numero con due decimali.

In un progetto reale ogni classe di solito vive nel proprio file, e i file vengono compilati insieme in un unico assembly. Vedi classi e oggetti per i dettagli.

La tipizzazione statica, in pratica

Il compilatore conosce il tipo di ogni espressione, quindi un'ampia categoria di errori non arriva mai a un programma in esecuzione. Assegnare una stringa a un int, chiamare un metodo che non esiste o passare gli argomenti nell'ordine sbagliato fallisce in fase di compilazione, con un errore che indica la riga.

Output:

29.97
45

I tipi guidano anche l'editor: autocompletamento, rinomina e "trova tutti i riferimenti" sono esatti in C# perché gli strumenti leggono le stesse informazioni sui tipi che legge il compilatore.

Le versioni di C# e cosa hanno aggiunto

Da C# 9 nel 2020, una nuova versione esce ogni novembre insieme a una nuova release di .NET; prima, le versioni arrivavano ogni due o tre anni. Ogni versione è progettata per continuare a compilare il codice esistente, e le rare eccezioni (come field che diventa una parola chiave dentro gli accessor delle proprietà in C# 14) sono documentate come breaking change, quindi un programma scritto per C# 2 quasi sempre compila ancora oggi senza modifiche.

VersioneAnnoNovità principali
C# 22005Generics, tipi valore nullable (int?), iteratori (yield)
C# 32007LINQ, espressioni lambda, var, inizializzatori di oggetti, metodi di estensione
C# 42010dynamic, parametri facoltativi e con nome
C# 52012async e await
C# 62015Interpolazione di stringhe $"...", nameof, operatore null-conditional ?.
C# 72017Tuple, out var, pattern matching con is, separatori di cifre
C# 82019Tipi riferimento nullable, switch expression, intervalli s[1..4], ??=, stream asincroni
C# 92020Record, accessor init, istruzioni di primo livello, new() tipizzato dalla destinazione
C# 102021Using globali, namespace con ambito di file, record struct
C# 112022Raw string literal """, membri required, list pattern
C# 122023Costruttori primari per le classi, collection expression [1, 2, 3]
C# 132024Collezioni params, il tipo System.Threading.Lock
C# 142025Membri di estensione, la parola chiave field nelle proprietà

Le versioni più recenti tolgono soprattutto cerimonie. Questo programma per C# 9 e successivi usa istruzioni di primo livello (niente class Program, niente Main), un record e una switch expression:

// C# 9 and later, in a .NET 6+ project (implicit usings import System)
var order = new Order("Maya", 21.00m);
Console.WriteLine(Shipping(order));

static string Shipping(Order o) => o.Total switch
{
    >= 50m => "free shipping",
    >= 20m => "standard shipping",
    _ => "shipping fee applies"
};

record Order(string Customer, decimal Total);

La stessa logica nello stile esplicito più vecchio, che compila con C# 6 e con ogni versione successiva:

Output:

standard shipping

Entrambe le forme sono C# valido. Lo stile più vecchio ed esplicito lo incontrerai nel codice esistente, nei tutorial e nei progetti Unity, quello più breve nei nuovi progetti .NET.

LINQ: interrogare i dati nel linguaggio

LINQ (Language Integrated Query, C# 3) è una delle funzionalità che le persone citano quando spiegano perché amano C#. Ti permette di filtrare, ordinare, raggruppare e trasformare qualsiasi collezione con una catena di metodi:

Output:

95, 91, 88, 72
Average: 78.0
Best: 95

La stessa sintassi funziona sulle liste in memoria, sulle tabelle di un database tramite Entity Framework e sull'XML. Approfondisci in LINQ.

C# è un buon primo linguaggio?

C# chiede più impegno iniziale di Python: dichiari i tipi, termini le istruzioni con il punto e virgola e metti il codice dentro le classi. In cambio, il compilatore individua gli errori presto, gli strumenti (Visual Studio, VS Code, Rider) sono eccellenti, e i concetti si trasferiscono direttamente a Java, TypeScript, Kotlin e C++. Se vuoi creare giochi con Unity o lavorare in un'azienda che usa .NET, è la scelta ovvia. Se il tuo obiettivo è l'analisi dei dati o il machine learning, Python ha l'ecosistema più ampio.

Per iniziare, installa l'SDK di .NET ed esegui dotnet new console, oppure parti da Hello World ed esegui direttamente gli esempi di queste pagine.

Domande frequenti

Cos'è C#?

C# (si pronuncia "C sharp") è un linguaggio di programmazione di uso generale, a tipizzazione statica e orientato agli oggetti, creato in Microsoft e pubblicato per la prima volta nel 2002. Il suo codice sorgente viene compilato in un linguaggio intermedio che il runtime di .NET trasforma in codice macchina, con la memoria gestita da un garbage collector. Si usa per backend web, giochi con Unity, app desktop, servizi cloud e strumenti.

C# e .NET sono la stessa cosa?

No. C# è il linguaggio; .NET è la piattaforma su cui gira: il runtime (CLR), la libreria di classi di base (System.Collections.Generic, System.IO e così via) e gli strumenti dell'SDK. Anche F# e Visual Basic girano su .NET, e di solito una versione di C# esce insieme a una versione di .NET (per esempio C# 12 con .NET 8).

A cosa serve C#?

API e siti web con ASP.NET Core, giochi con Unity (il suo linguaggio di scripting è C#), app desktop per Windows con WPF e WinForms, app multipiattaforma con .NET MAUI, servizi cloud e Azure Functions, e strumenti da riga di comando. È diffuso nel software aziendale e negli studi di videogiochi.

C# è difficile da imparare?

Come primo linguaggio ha una difficoltà media. La sintassi è in stile C e più rigida di Python, perché ogni variabile ha un tipo che il compilatore controlla, ma la memoria è gestita per te e i messaggi di errore sono chiari. La maggior parte dei principianti riesce a scrivere programmi console utili dopo qualche settimana di pratica.

Vale ancora la pena imparare C#?

Sì. C# è costantemente tra i linguaggi più usati nei sondaggi tra sviluppatori, .NET è open source e multipiattaforma, e il linguaggio riceve una nuova versione ogni novembre. È la scelta pratica se vuoi creare giochi con Unity o lavorare in aziende basate sulla tecnologia Microsoft.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA