Introduzione al linguaggio C#

Fondamenti di programmazione orientata agli oggetti

ITT Fauser — Classi quarte

Cos'è C#?

Il nome "C#" si legge "C sharp". Il simbolo # richiama il ++ del C++, raddoppiato: un linguaggio che va oltre il C++.

A cosa serve C#?

Applicazioni desktop

Windows Forms, WPF, .NET MAUI

Applicazioni web

ASP.NET, Blazor

Videogiochi

Unity (il motore di gioco più diffuso al mondo)

App mobile

.NET MAUI, Xamarin

Cloud e microservizi

Azure, API REST

IoT e sistemi embedded

.NET nanoFramework

Come funziona? Da codice a esecuzione

Codice sorgente
.cs
Compilatore
csc / dotnet build
IL
(Intermediate Language)
CLR / JIT
Esecuzione
Il codice C# non viene compilato direttamente in linguaggio macchina, ma in un linguaggio intermedio (IL). Al momento dell'esecuzione, il CLR (Common Language Runtime) lo traduce in codice macchina tramite il compilatore JIT (Just-In-Time). Questo approccio permette la portabilità su diverse piattaforme.

Il primo programma

// Il classico "Hello, World!"
using System;
Console.WriteLine("Hello, World!");

Variabili e tipi di dato

C# è fortemente tipizzato: ogni variabile ha un tipo dichiarato.

TipoDescrizioneEsempio
intNumero intero (32 bit)42
doubleNumero decimale (64 bit)3.14
boolValore booleanotrue / false
charSingolo carattere'A'
stringStringa di testo"ciao"
int eta = 17;
double media = 7.5;
bool promosso = true;
string nome = "Marco";

Costanti e inferenza di tipo

Costanti

Una costante non può essere modificata dopo la dichiarazione:

const double PI = 3.14159;
const int MAX_STUDENTI = 30;

Parola chiave var

Il compilatore deduce automaticamente il tipo dal valore assegnato:

var citta = "Torino";      // string
var numero = 42;              // int
var prezzo = 9.99;            // double
Attenzione: var non significa "senza tipo". Il tipo viene fissato a compile-time e non può cambiare.

Input e Output

Output a schermo

Console.WriteLine("Riga con a capo");
Console.Write("Senza a capo");

String interpolation

string nome = "Anna";
int eta = 17;
Console.WriteLine($"Mi chiamo {nome} e ho {eta} anni.");

Input da tastiera

Console.Write("Inserisci il tuo nome: ");
string input = Console.ReadLine();

Console.Write("Inserisci la tua età: ");
int eta = int.Parse(Console.ReadLine());
Console.ReadLine() restituisce sempre una string. Per ottenere un numero, serve una conversione (es. int.Parse()).

Operatori

Aritmetici

+Addizione
-Sottrazione
*Moltiplicazione
/Divisione
%Modulo (resto)

Di confronto

==Uguale
!=Diverso
< >Minore / Maggiore
<= >=Minore o uguale / Maggiore o uguale

Logici

&&AND
||OR
!NOT

Strutture di selezione

if / else if / else

int voto = 7;

if (voto >= 6)
{
    Console.WriteLine("Promosso!");
}
else
{
    Console.WriteLine("Bocciato.");
}

switch

int giorno = 3;

switch (giorno)
{
    case 1:
        Console.WriteLine("Lunedì");
        break;
    case 2:
        Console.WriteLine("Martedì");
        break;
    default:
        Console.WriteLine("Altro");
        break;
}

Strutture di iterazione

Ciclo for

for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}
// Stampa: 0, 1, 2, 3, 4

Ciclo while

int n = 0;
while (n < 3)
{
    Console.WriteLine(n);
    n++;
}

Ciclo do-while

int x;
do
{
    Console.Write("Numero: ");
    x = int.Parse(
        Console.ReadLine());
} while (x <= 0);
// Ripete finché x non è positivo

Ciclo foreach

string[] nomi = {"Anna", "Luca"};
foreach (string n in nomi)
{
    Console.WriteLine(n);
}

Array

Un array è una struttura dati che contiene una sequenza di elementi dello stesso tipo e di dimensione fissa.

// Dichiarazione e inizializzazione
int[] voti = { 7, 8, 6, 9, 5 };

// Oppure: dichiarazione con dimensione
int[] numeri = new int[10];

// Accesso agli elementi (indice parte da 0!)
Console.WriteLine(voti[0]);    // 7
Console.WriteLine(voti[4]);    // 5

// Lunghezza dell'array
Console.WriteLine(voti.Length); // 5

// Scorrere un array
for (int i = 0; i < voti.Length; i++)
    Console.WriteLine($"Voto {i}: {voti[i]}");

Metodi (funzioni)

I metodi permettono di organizzare il codice in blocchi riutilizzabili.

// Metodo che ritorna un valore
int Somma(int a, int b)
{
    return a + b;
}

// Metodo senza valore di ritorno (void)
void Saluta(string nome)
{
    Console.WriteLine($"Ciao, {nome}!");
}

// Utilizzo della funzione
int risultato = Somma(3, 5);   // 8
Saluta("Marco");              // "Ciao, Marco!"

C# confrontato con altri linguaggi

C#JavaC++
Paradigma OOP + funzionale OOP Multi-paradigma
Memoria Garbage Collector Garbage Collector Manuale
Piattaforma .NET (CLR) JVM Nativo
Compilazione IL → JIT Bytecode → JIT Codice macchina
Puntatori Solo in unsafe No
Uso tipico Desktop, web, giochi Enterprise, Android Sistemi, performance
Se conoscete Java, vi troverete subito a vostro agio: la sintassi di C# è molto simile.

Esempio completo: calcolatrice della media

using System;

class CalcolaMedia
{
    static double Media(int[] voti)
    {
        double somma = 0;
        foreach (int v in voti)
            somma += v;
        return somma / voti.Length;
    }

    static void Main(string[] args)
    {
        Console.Write("Quanti voti? ");
        int n = int.Parse(Console.ReadLine());
        int[] voti = new int[n];

        for (int i = 0; i < n; i++)
        {
            Console.Write($"Voto {i + 1}: ");
            voti[i] = int.Parse(Console.ReadLine());
        }

        Console.WriteLine($"Media: {Media(voti):F2}");
    }
}

Riepilogo

Cosa abbiamo visto

  • Cos'è C# e come funziona
  • Struttura di un programma
  • Variabili e tipi di dato
  • Input / Output
  • Operatori
  • Selezione (if, switch)
  • Iterazione (for, while, foreach)
  • Array
  • Metodi

Prossimi argomenti

  • Classi e oggetti
  • Ereditarietà
  • Gestione delle eccezioni
  • Collezioni (List, Dictionary)

Compilare con dotnet da command line (Linux / OSX)

dotnet new console per creare progetto
Scrivi il codice all'interno del file Program.cs
dotnet build compila codice senza eseguire
dotnet run esegue codice

Domande?

Grazie per l'attenzione