C# (prononcé « C sharp ») est un langage de programmation généraliste conçu chez Microsoft par une équipe dirigée par Anders Hejlsberg, publié pour la première fois en 2002. Il est à typage statique (chaque variable a un type que le compilateur vérifie avant l'exécution du programme), orienté objet (le code est organisé en classes) et managé (un ramasse-miettes libère la mémoire pour vous). Le C# moderne emprunte aussi beaucoup à la programmation fonctionnelle : lambdas, requêtes LINQ, pattern matching et records immuables.
Voici un programme C# complet. Appuyez sur Run :
Sortie :
Hello, Ada! It is 2026.
À quoi sert C#
C# est un langage généraliste, on le trouve donc dans la plupart des types de logiciels, mais quelques domaines en représentent l'essentiel :
- Les jeux. Unity, l'un des moteurs de jeu les plus utilisés, se programme en C#. Godot le prend aussi en charge.
- Les backends web. ASP.NET Core est le framework web de .NET pour les API, les sites et les applications temps réel. C'est l'un des frameworks web grand public les plus rapides dans les benchmarks publics.
- Les applications de bureau. WPF et Windows Forms sous Windows, .NET MAUI et Avalonia sur toutes les plateformes.
- Le cloud et les services. Azure Functions, workers en arrière-plan, microservices en conteneurs.
- Les outils et l'automatisation. Outils en ligne de commande, scripts de build, traitement de données.
Il est particulièrement répandu dans les grandes entreprises qui reposent sur les technologies Microsoft et dans les studios de jeux vidéo. Les applications mobiles sont possibles avec .NET MAUI (le successeur de Xamarin), mais c'est une niche plus petite que Kotlin ou Swift.
C# et .NET ne sont pas la même chose
C# est le langage. .NET est la plateforme qui l'exécute, et elle se compose de trois parties :
- Le runtime (CLR). Le compilateur C# ne produit pas de code machine. Il produit du langage intermédiaire (IL), stocké dans des fichiers
.dllou.exe. À l'exécution, le Common Language Runtime compile cet IL en code natif juste à temps (JIT), gère la mémoire avec un ramasse-miettes et garantit la sûreté des types. - La bibliothèque de classes de base. Collections, accès aux fichiers, réseau, texte, dates, threads : tout ce qui se trouve sous
System.*. - Le SDK. La commande
dotnet, qui crée, compile, teste et exécute les projets.
D'autres langages sont compilés vers le même IL (F#, Visual Basic), c'est pourquoi un programme C# peut utiliser une bibliothèque écrite en F#.
La plateforme existe en deux générations. .NET Framework (de 1.0 en 2002 à 4.8.1) ne fonctionne que sous Windows et fait encore tourner beaucoup d'applications anciennes. .NET (appelé .NET Core jusqu'à la version 5) est son successeur open source et multiplateforme, qui tourne sous Windows, Linux et macOS. Les nouveaux projets ciblent .NET ; les versions paires comme .NET 8 et .NET 10 bénéficient de trois ans de support à long terme.
Comment un programme C# est structuré
Un programme C# est fait de types (classes, structs, interfaces, enums, records) qui contiennent des membres (champs, propriétés, méthodes). L'exécution commence dans une méthode statique nommée Main. Les namespaces regroupent les types apparentés, et les directives using permettent de les désigner par des noms courts.
Sortie :
Maya: 21.00
Leo: 13.00
Plusieurs choses sont déjà visibles : Order est une classe avec deux propriétés (Customer, Total), un constructeur et une méthode. decimal est le type adapté à l'argent, et le suffixe m marque un littéral decimal. var laisse le compilateur déduire le type d'une variable locale, et List<Order> est une collection générique qui n'accepte que des objets Order. Le {order.Total:F2} à l'intérieur de $"..." formate un nombre avec deux décimales.
Dans un vrai projet, chaque classe vit en général dans son propre fichier, et les fichiers sont compilés ensemble en un seul assembly. Voir classes et objets pour les détails.
Le typage statique, en pratique
Le compilateur connaît le type de chaque expression, si bien qu'une grande catégorie d'erreurs n'atteint jamais un programme en cours d'exécution. Affecter une chaîne à un int, appeler une méthode qui n'existe pas ou passer des arguments dans le mauvais ordre échoue à la compilation, avec une erreur qui pointe sur la ligne.
Sortie :
29.97
45
Les types servent aussi l'éditeur : l'autocomplétion, le renommage et « rechercher toutes les références » sont exacts en C#, car les outils lisent les mêmes informations de type que le compilateur.
Les versions de C# et ce qu'elles ont apporté
Depuis C# 9 en 2020, une nouvelle version sort chaque mois de novembre en même temps qu'une nouvelle version de .NET ; auparavant, les versions arrivaient tous les deux ou trois ans. Chaque version est conçue pour que le code existant continue de compiler, et les rares exceptions (comme field qui devient un mot-clé dans les accesseurs de propriété en C# 14) sont documentées comme des changements cassants, si bien qu'un programme écrit pour C# 2 compile presque toujours tel quel aujourd'hui.
| Version | Année | Ajouts marquants |
|---|---|---|
| C# 2 | 2005 | Génériques, types valeur nullables (int?), itérateurs (yield) |
| C# 3 | 2007 | LINQ, expressions lambda, var, initialiseurs d'objets, méthodes d'extension |
| C# 4 | 2010 | dynamic, paramètres optionnels et nommés |
| C# 5 | 2012 | async et await |
| C# 6 | 2015 | Interpolation de chaînes $"...", nameof, opérateur conditionnel null ?. |
| C# 7 | 2017 | Tuples, out var, pattern matching avec is, séparateurs de chiffres |
| C# 8 | 2019 | Types référence nullables, expressions switch, plages s[1..4], ??=, flux asynchrones |
| C# 9 | 2020 | Records, accesseurs init, instructions de niveau supérieur, new() à type cible |
| C# 10 | 2021 | Usings globaux, namespaces de portée fichier, record structs |
| C# 11 | 2022 | Littéraux de chaîne bruts """, membres required, list patterns |
| C# 12 | 2023 | Constructeurs principaux pour les classes, expressions de collection [1, 2, 3] |
| C# 13 | 2024 | Collections params, le type System.Threading.Lock |
| C# 14 | 2025 | Membres d'extension, le mot-clé field dans les propriétés |
Les versions récentes suppriment surtout du cérémonial. Ce programme C# 9 et plus utilise des instructions de niveau supérieur (pas de class Program, pas de Main), un record et une expression switch :
// 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 même logique dans l'ancien style explicite, qui compile en C# 6 et dans toutes les versions suivantes :
Sortie :
standard shipping
Les deux formes sont du C# valide. Vous rencontrerez l'ancien style explicite dans le code existant, les tutoriels et les projets Unity, et le style plus court dans les nouveaux projets .NET.
LINQ : interroger des données dans le langage
LINQ (Language Integrated Query, C# 3) est l'une des fonctionnalités que l'on cite quand on explique pourquoi on aime C#. Il permet de filtrer, trier, grouper et transformer n'importe quelle collection avec une chaîne de méthodes :
Sortie :
95, 91, 88, 72
Average: 78.0
Best: 95
La même syntaxe fonctionne sur les listes en mémoire, sur les tables d'une base de données via Entity Framework, et sur du XML. Plus de détails dans LINQ.
C# est-il un bon premier langage ?
C# demande plus d'efforts au départ que Python : vous déclarez des types, terminez les instructions par des points-virgules et placez le code dans des classes. En échange, le compilateur détecte les erreurs tôt, les outils (Visual Studio, VS Code, Rider) sont excellents, et les concepts se transposent directement à Java, TypeScript, Kotlin et C++. Si vous voulez créer des jeux Unity ou travailler dans une entreprise .NET, c'est le choix évident. Si votre objectif est l'analyse de données ou le machine learning, Python a un écosystème plus vaste.
Pour commencer, installez le SDK .NET et lancez dotnet new console, ou commencez par Hello World et exécutez directement les exemples de ces pages.
Questions fréquentes
Qu'est-ce que C# ?
C# (prononcé « C sharp ») est un langage de programmation généraliste, orienté objet et à typage statique, créé chez Microsoft et publié pour la première fois en 2002. Son code source est compilé vers un langage intermédiaire que le runtime .NET transforme en code machine, avec une mémoire gérée par un ramasse-miettes. On l'utilise pour les backends web, les jeux Unity, les applications de bureau, les services cloud et les outils.
C# et .NET, est-ce la même chose ?
Non. C# est le langage ; .NET est la plateforme sur laquelle il s'exécute : le runtime (CLR), la bibliothèque de classes de base (System.Collections.Generic, System.IO, etc.) et les outils du SDK. F# et Visual Basic s'exécutent aussi sur .NET, et une version de C# sort en général avec une version de .NET (par exemple C# 12 avec .NET 8).
À quoi sert C# ?
Aux API et sites web avec ASP.NET Core, aux jeux avec Unity (dont le langage de script est C#), aux applications de bureau Windows avec WPF et WinForms, aux applications multiplateformes avec .NET MAUI, aux services cloud et Azure Functions, et aux outils en ligne de commande. Il est très répandu dans les logiciels d'entreprise et les studios de jeux vidéo.
C# est-il difficile à apprendre ?
C'est un premier langage de difficulté moyenne. La syntaxe est de style C et plus stricte que celle de Python, puisque chaque variable a un type vérifié par le compilateur, mais la mémoire est gérée pour vous et les messages d'erreur sont clairs. La plupart des débutants écrivent des programmes console utiles après quelques semaines de pratique.
Vaut-il encore la peine d'apprendre C# ?
Oui. C# figure toujours parmi les langages les plus utilisés dans les enquêtes auprès des développeurs, .NET est open source et multiplateforme, et le langage reçoit une nouvelle version chaque mois de novembre. C'est le choix pratique si vous voulez créer des jeux avec Unity ou travailler dans une entreprise bâtie sur les technologies Microsoft.