C# vs .NET
Ce qui est du langage et ce qui est du framework - comprendre la frontière entre C# et .NET.
C# vs .NET
Dans l'introduction, on a posé la règle : C# est le langage, .NET est la plateforme. Mais concrètement, où est la frontière ? Quand tu écris Console.WriteLine("Hello"), qu'est-ce qui vient de C# et qu'est-ce qui vient de .NET ?
# Ce qui est C# (le langage)
C# définit la syntaxe et les règles du langage. C'est tout ce que le compilateur comprend nativement :
- Les mots-clés :
if,else,for,class,struct,record,async,await... - Les opérateurs :
+,==,??,?.,is,as... - Le système de types :
int,bool,string,object,void - Les structures : classes, interfaces, enums, structs, records
- Les modificateurs :
public,private,abstract,sealed,static - Les fonctionnalités : generics, pattern matching, LINQ syntax, lambdas
C# ne fournit aucune fonctionnalité concrète. Pas de lecture de fichiers, pas de réseau, pas d'affichage console, pas de collections. Juste les règles pour écrire du code.
# Ce qui est .NET (la plateforme)
.NET fournit tout le reste - l'environnement d'exécution et les bibliothèques qui rendent C# utile :
Le CLR (Common Language Runtime)
Le moteur d'exécution. Le compilateur C# (Roslyn) transforme d'abord le code en code intermédiaire (IL). Ensuite, c'est le CLR qui :
- Compile le code IL en code machine natif au moment de l'exécution (JIT - Just-In-Time)
- Gère la mémoire et le garbage collector
- Gère les exceptions
- Vérifie la sécurité du code à l'exécution
La BCL (Base Class Library)
La bibliothèque standard. C'est elle qui fournit :
| Besoin | Namespace .NET | Exemple |
|---|---|---|
| Console | System | Console.WriteLine() |
| Collections | System.Collections.Generic | List<T>, Dictionary<K,V> |
| Fichiers | System.IO | File.ReadAllText() |
| Réseau | System.Net.Http | HttpClient |
| JSON | System.Text.Json | JsonSerializer |
| Dates | System | DateTime, TimeSpan |
| Maths | System | Math.Sqrt(), Math.PI |
| Async | System.Threading.Tasks | Task, Task<T> |
| Regex | System.Text.RegularExpressions | Regex.Match() |
Quand tu écris Console.WriteLine("Hello") :
Consoleest une classe .NET (namespaceSystem).WriteLine()est une méthode .NET- Les parenthèses, le
;et la string"Hello"sont de la syntaxe C#
Les frameworks applicatifs
Au-dessus de la BCL, .NET propose des frameworks pour chaque type d'application :
- ASP.NET Core - Web (API, MVC, Blazor)
- MAUI - Mobile et desktop cross-platform
- WPF / WinForms - Desktop Windows
- Entity Framework - ORM (accès base de données)
# L'analogie
Pense à C# comme la grammaire française et à .NET comme un dictionnaire + une encyclopédie :
- La grammaire te dit comment construire des phrases (syntaxe)
- Le dictionnaire te donne les mots (BCL)
- L'encyclopédie te donne les connaissances spécialisées (frameworks)
Tu peux connaître parfaitement la grammaire, mais sans dictionnaire, tu ne peux pas écrire grand-chose.
# Les versions de .NET
L'écosystème .NET a évolué et changé de nom plusieurs fois, ce qui crée de la confusion :
| Nom | Période | Plateforme |
|---|---|---|
| .NET Framework | 2002 – 2019 | Windows uniquement |
| .NET Core | 2016 – 2020 | Cross-platform (Windows, Linux, macOS) |
| .NET 5+ | 2020 – aujourd'hui | Fusion des deux, cross-platform |
Aujourd'hui, on dit simplement .NET (sans "Core" ni "Framework"). La dernière version LTS est .NET 10 (novembre 2025).
Si tu vois du code qui cible .NET Framework 4.x, c'est du legacy. Les nouveaux projets doivent utiliser .NET 6, 7 ou 8.
# En pratique
Quand tu crées un projet C#, tu choisis une version de .NET qui détermine :
- Quelles fonctionnalités C# sont disponibles (chaque version de .NET supporte jusqu'à une certaine version de C#)
- Quelles bibliothèques sont incluses
- Sur quelles plateformes tu peux déployer
# Créer un projet console avec .NET 8
dotnet new console -n MonProjet
# Le fichier .csproj spécifie la version
# <TargetFramework>net8.0</TargetFramework># Créer un projet console avec .NET 8dotnet new console -n MonProjet # Le fichier .csproj spécifie la version# <TargetFramework>net8.0</TargetFramework>| .NET | C# max | Sortie |
|---|---|---|
| .NET 6 (LTS) | C# 10 | Nov 2021 |
| .NET 7 | C# 11 | Nov 2022 |
| .NET 8 (LTS) | C# 12 | Nov 2023 |
| .NET 9 | C# 13 | Nov 2024 |
| .NET 10 (LTS) | C# 14 | Nov 2025 |
# Ce qu'il faut retenir
- C# = la syntaxe (
if,class,async). Change tous les ans avec une nouvelle version. - .NET = la plateforme (BCL, CLR, frameworks). Change aussi tous les ans.
Console,List<T>,File,HttpClient= c'est .NET, pas C#var,??,record,switch expression= c'est C#, pas .NET- Quand quelqu'un dit "je fais du .NET", il veut dire "j'écris du C# sur la plateforme .NET"
- Les deux évoluent ensemble mais sont techniquement indépendants - tu pourrais écrire du F# ou du VB.NET sur .NET aussi
# La suite
Tu as maintenant une vision complète du langage C# et de son écosystème. Cette série a couvert :
- Introduction - origines et vue d'ensemble
- Les types - primitifs, collections, strings
- La syntaxe - variables, opérateurs, contrôle, méthodes
- Les objets - classes, constructeurs, propriétés, héritage
- La mémoire - stack vs heap, value/reference types