C# è un linguaggio di programmazione moderno e multi-paradigma sviluppato da Microsoft all'interno del suo framework .NET. Destinato principalmente allo sviluppo software per applicazioni Windows e web, C# combina tipizzazione forte, caratteristiche di programmazione imperativa e orientata agli oggetti (OOP) con capacità di programmazione funzionale. È ampiamente riconosciuto per la sua leggibilità, versatilità e robusto supporto allo sviluppo, rendendolo un favorito tra gli sviluppatori aziendali e i programmatori di giochi, specialmente in combinazione con il motore di gioco Unity.
C# è stato creato all'inizio degli anni 2000 da Anders Hejlsberg e il suo team di Microsoft come parte dell'iniziativa .NET. Il linguaggio è stato progettato per migliorare la produttività fornendo un linguaggio di programmazione semplice, moderno e orientato agli oggetti che si integra bene con l'ecosistema Microsoft. L'influenza di linguaggi precedenti, come Java e C++, è evidente nella sua struttura.
Le versioni iniziali di C# erano strettamente associate al framework .NET, che mirava a fornire agli sviluppatori un insieme completo di librerie e strumenti per la creazione di applicazioni. La versione 1.0 di C# è stata lanciata insieme al .NET Framework nel 2002. Nel corso degli anni, sono state implementate ulteriori funzionalità e miglioramenti, con C# che è evoluto significativamente attraverso varie iterazioni.
Il rilascio di .NET Core nel 2016 ha segnato una pietra miliare importante, rendendo C# multipiattaforma e aumentando la sua versatilità. Le versioni successive, inclusa C# 7.0 e oltre, hanno introdotto funzionalità come tuple, pattern matching e stream asincroni, migliorando ulteriormente il linguaggio. Oggi, C# è all'avanguardia nello sviluppo software moderno, supportato da una comunità vivace e aggiornamenti continui nell'ecosistema .NET.
C# è un linguaggio a tipizzazione statica, il che significa che i tipi delle variabili sono noti al momento della compilazione. Questa caratteristica migliora le prestazioni e previene alcuni tipi di errori di runtime.
int numero = 10;
string testo = "Ciao, C#";
C# supporta pienamente i concetti OOP, consentendo agli sviluppatori di creare classi e oggetti, incapsulare dati e utilizzare ereditarietà e polimorfismo.
class Animale {
public void Parla() {
Console.WriteLine("L'animale parla");
}
}
class Cane : Animale {
public void Parla() {
Console.WriteLine("Il cane abbaia");
}
}
C# consente l'uso di proprietà, consentendo una migliore incapsulazione dei dati della classe mantenendo un facile accesso per ottenere e impostare valori.
class Persona {
private string nome;
public string Nome {
get { return nome; }
set { nome = value; }
}
}
C# supporta i delegati, che sono puntatori a funzione a tipo sicuro, e eventi per implementare la programmazione basata su eventi.
public delegate void Notifica(); // Delegato
public class Processo {
public event Notifica ProcessoCompletato; // Evento
public void IniziaProcesso() {
// Logica del processo
ProcessoCompletato?.Invoke(); // Solleva evento
}
}
C# offre LINQ, una potente funzionalità che consente di interrogare collezioni in modo conciso e leggibile.
var numeri = new List<int> { 1, 2, 3, 4, 5 };
var numeriPari = from n in numeri where n % 2 == 0 select n;
C# semplifica la programmazione asincrona utilizzando le parole chiave async e await, migliorando le prestazioni per compiti legati all'I/O.
public async Task<string> OttieniDatiAsync() {
using (var client = new HttpClient()) {
return await client.GetStringAsync("http://example.com");
}
}
I metodi di estensione consentono agli sviluppatori di "aggiungere" nuovi metodi a tipi esistenti senza modificare il loro codice sorgente.
public static class MieiEstensioni {
public static int ConteggioParole(this string str) {
return str.Split(' ').Length;
}
}
C# supporta i tipi valore nullable, consentendo la rappresentazione di dati che possono essere assenti.
int? numeroNullable = null;
C# fornisce supporto integrato per le tuple, consentendo l'incapsulamento di più valori.
var persona = (Nome: "Giovanni", Età: 30);
Console.WriteLine($"{persona.Nome} ha {persona.Età} anni.");
Il .NET SDK è il set di strumenti principale per sviluppare applicazioni in C#. Include il CLR (Common Language Runtime), librerie e compilatori necessari per eseguire e compilare codice C#.
Visual Studio è l'IDE principale per lo sviluppo in C#, fornendo debugging avanzato, IntelliSense e un ambiente unificato per costruire e distribuire applicazioni. Altre opzioni popolari includono JetBrains Rider e Visual Studio Code, che, con le giuste estensioni, possono essere adattati per lo sviluppo in C#.
Per costruire un progetto C# utilizzando il .NET CLI, si possono usare comandi come dotnet new
per creare un nuovo progetto, dotnet build
per compilare il codice e dotnet run
per eseguire l'applicazione. Il processo di creazione di un'applicazione console apparirebbe così:
dotnet new console -n MiaAppConsole
cd MiaAppConsole
dotnet run
C# è utilizzato in una vasta gamma di applicazioni, tra cui:
C# si presenta come un linguaggio potente rispetto ad altri. Ecco alcune somiglianze e differenze notevoli:
Tradurre codice tra C# e altri linguaggi può spesso essere facilitato da strumenti di traduzione da codice a codice, comunemente noti come transpiler. Ad esempio, strumenti come SharpKit possono convertire codice C# in JavaScript per applicazioni web, mentre Bridge.NET consente a C# di essere compilato in applicazioni JavaScript o HTML5.
In scenari più specializzati, esistono librerie e strumenti che convertono C# in altri linguaggi come Java o Python, spesso concentrandosi su specifiche caratteristiche e paradigmi del linguaggio per garantire un processo di conversione efficace.
Ad esempio, quando si traduce da C# a Python, lo sviluppatore dovrebbe prestare attenzione ad adattare il sistema di tipi e le pratiche di gestione della memoria, poiché la tipizzazione dinamica di Python e i principi di garbage collection differiscono dalla tipizzazione statica e dal runtime gestito di C#.
Strumenti esistenti che facilitano varie traduzioni di codice includono CodePorting per convertire applicazioni .NET in Java e Jitterbit per soluzioni di integrazione più ampie. Ogni strumento ha i suoi punti di forza, e la scelta dipende dalle specifiche del progetto e dai risultati desiderati.