Per comprendere fin da subito le nozioni di base sugli elementi fondamentali della programmazione in C#, escludendone, inizialmente, le nozioni di ereditarietà e di programmazione orientata agli oggetti, inizieremo con la semplice scrittura di un’applicazione di tipo Console costituita da una classe che mostra un messaggio sullo schermo.
In questa prima fase non verrà utilizzato l’ambiente di sviluppo Visual Studio; piuttosto il codice verrà scritto su file di testo (es. Notepad), salvato con estensione .cs (es. NozioniFondamentali.cs) e compilato da riga di comando.
using System;
namespace NozioniFondamentali
{
class MiaPrimaClasse
{
static void Main()
{
Console.WriteLine("Ciao da Marco.");
Console.ReadLine();
return;
}
}
}
Compilazione.
Per compilare il programma da riga di comando occorre richiamare il file eseguibile del compilatore C# denominato csc.exe. Il modo più semplice è quello di aver installato, nel proprio sistema, l’ambiente di sviluppo integrato Visual Studio (la versione Community è gratuita) ed eseguire le seguenti operazioni:
- menu start > Visual Studio 2017 > Prompt dei comandi per gli sviluppatori VS 2017;
- spostarsi nella cartella dove si trova il file con il codice da compilare;
- lanciare il comando csc NozioniFondamentali.cs
La compilazione del codice genera un file eseguibile denominato NozioniFondamentali.exe che, una volta lanciato, visualizzerà sullo schermo la stringa di testo “Ciao da Marco.”
Analisi del codice.
Innanzitutto facciamo alcune doverose premesse riguardo la sintassi di C#:
- la maggior parte delle istruzioni termina con un punto e virgola (;);
- le istruzioni possono essere riunite in blocchi utilizzando le parentesi graffe ({});
- i commenti su riga singola iniziano con due caratteri barra (//);
- i commenti su più righe iniziano con una barra e un asterisco (/*) e terminano con la combinazione invertita (*/);
- c’è distinzione tra lettere maiuscole e minuscole (case-sensitive): le variabili miaVariabile e MiaVariabile sono due cose distinte.
Namespace.
Tornando al blocco di codice relativo all’esempio precedente, le prime righe hanno a che fare con il concetto di namespace (spazio dei nomi).
I namespace evitano i conflitti dei nomi tra le classi. Essi raggruppano i tipi di dati (le classi associate) all’interno del loro spazio delimitato dalle parentesi graffe: il risultato è che tutti i tipi di dati al loro interno acquistano come prefisso il nome del namespace a cui appartengono. Per esempio, la classe base Array appartiene allo spazio dei nomi System e il suo nome completo è System.Array.
La parola chiave namespace dichiara lo spazio dei nomi a cui deve essere associata la classe.
La direttiva using specifica il namespace che il compilatore deve cercare per trovare le classi referenziate nel codice, ma non definite nel namespace corrente. Nell’applicazione di esempio, using System consente di fare riferimento alla classe Console senza specificare per intero System.Console. Senza using si sarebbe dovuto specificare interamente la chiamata al metodo WriteLine() come indicato di seguito:
System.Console.WriteLine("Ciao da Marco.");
La classe
Dopo aver dichiarato lo spazio dei nomi viene dichiarata la classe MiaPrimaClasse, il cui nome completo sarà NozioniFondamentali.MiaPrimaClasse.
Tutto il codice C# si trova all’interno della classe che viene dichiarata con la parola chiave class ed è racchiuso tra le parentesi graffe.
Il metodo.
Il metodo Main() rappresenta il punto di ingresso e viene richiamato all’avvio del programma. Questo metodo deve restituire un intero (int) o nulla (null).
Il formato delle definizioni dei metodi è il seguente:
[modificatori] tipo_restituito nomeMetodo([parametri])
{
//Corpo del metodo
}
I modificatori.
I modificatori determinano alcune caratteristiche del metodo come l’accessibilità. Per esempio, il modificatore public rende un metodo accessibile da qualsiasi punto dell’applicazione; il modificatore static indica che il metodo può essere richiamato senza che la classe venga instanziata.
Le chiamate ai metodi della classe Console.
Per finire, nell’esempio di codice viene chiamato il metodo WriteLine() della classe System.Console che scrive una stringa di testo nella finestra della console. Essendo un metodo static non è necessario istanziare la classe Console.
Console.ReadLine() legge l’input dell’utente e impone all’applicazione di attendere la pressione del tasto Invio per chiudere l’applicazione.
Il tipo restituito.
Return permette di uscire dal metodo e, dal momento che nella dichiarazione del metodo il valore restituito è void, questo non restituirà nulla.