A detta di molti addetti ai lavori il linguaggio C# e l’associato ambiente del .NET Framework costituiscono attualmente la più importante tecnologia disponibile per lo sviluppo di applicazioni. Il .NET Framework è progettato per fornire un ambiente all’interno del quale è possibile sviluppare praticamente tutti i tipi di applicazioni che possono girare su Windows e il linguaggio C# è progettato specificatamente per interfacciarsi con questo framework.
Utilizzando C# è possibile sviluppare una classica applicazione desktop, una pagina web dinamica, un web service XML, un componente per l’accesso ad un database e tante altre tipologie di applicazioni o servizi.
Il linguaggio C# è un linguaggio orientato agli oggetti ma non può prescindere dal .NET Framework, deve essere considerato parallelamente ad esso. Il compilatore C# è specificatamente orientato a .NET e tutto il codice di programmazione gira utilizzando il .NET Framework.
Questo ha due importanti conseguenze:
- L’architettura ed i metodi di C# riflettono i metodi del sottostante ambiente .NET
- Alcune caratteristiche specifiche di C# dipendono da caratteristiche delle classi base .NET
Un punto cardine del .NET Framework è il suo ambiente di esecuzione, conosciuto come Common Language Runtime (CLR). Il codice controllato dal CLR è solitamente denominato codice gestito (managed code).
Tuttavia prima di essere eseguito dal CLR tutto il codice sorgente necessita di essere compilato e in .NET la compilazione prevede due step:
- Compilazione del codice sorgente in Microsoft Intermediate Language (IL)
- Compilazione da parte del CLR dell’IL in codice specifico per la piattaforma di destinazione
Il Microsoft Intermediate Language condivide con il linguaggio Java il fatto di generare un codice di basso livello (byte code) con una sintassi semplice che può essere velocemente tradotto in codice macchina. Questo comporta diversi vantaggi tra cui, soprattutto, indipendenza dalla piattaforma e miglioramento delle prestazioni.
Indipendenza dalla piattaforma significa che lo stesso file in byte code può essere utilizzato su qualsiasi piattaforma che supporti .NET e in fase di esecuzione tale codice viene compilato dal CLR opportunamente per funzionare sulla piattaforma in cui risiede in quel momento.
Il miglioramento delle prestazioni è relativo ad altri linguaggi orientati agli oggetti, come Java. Infatti il Microsoft Intermediate Language utilizza un modello di compilazione denominato Just-in.Time (JIT compilation). Invece di compilare l’intera applicazione tutta in una volta il compilatore JIT compila semplicemente le porzioni di codice che vengono utilizzate. Questo si traduce in un miglioramento delle prestazioni, soprattutto in fase di avvio delle applicazioni.
Ricapitolando quindi C# è un linguaggio orientato agli oggetti che consente agli sviluppatori di implementare una grande varietà di applicazioni e servizi che si appoggiano al .NET Framework. La sintassi di questo linguaggio è simile a quella di altri linguaggi orientati agli oggetti, come C++ e soprattutto Java. Come linguaggio orientato agli oggetti C# supporta i concetti di incapsulamento, ereditarietà e polimorfismo.
In aggiunta a questi principi di base C# rende più semplice lo sviluppo di componenti software tramite alcuni costrutti innovativi come i seguenti:
- Delegati
- Proprietà
- Attributi
- Language-Integrated-Query (LINQ)
C# supporta anche la dichiarazione di variabili implicitamente tipizzate tramite la parola chiave var.
Questo linguaggio inoltre può sfruttare la .NET Class Library, una vasta collezione classi predefinite che fornisce funzionalità per lo sviluppo veloce di applicazioni.
E’ un linguaggio guidato dagli eventi (event driven) il che significa che è possibile sviluppare applicazioni che rispondano all’interazione con l’utente tramite click del mouse, tocchi sul display di smartphone, pressione di un pulsante, ecc.
C# consente anche la programmazione asincrona, tramite la quale è possibile effettuare più operazioni simultaneamente mantenendo le nostre applicazioni sempre responsive all’interazione con l’utente.
La presente guida ha come obiettivo quello di illustrare le peculiarità principali del linguaggio C#.