String vs string en C# : quelle est la différence et que choisir ?

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

String et string en C# : est-ce la même chose ou pas ? Analyse avec exemples

\n\n

Si vous avez déjà écrit du code en C#, vous avez sûrement remarqué que les chaînes peuvent être déclarées de deux manières :

\n\n
string name = "Anna";\nString greeting = "Bonjour !";
\n\n

Et les deux options fonctionnent. Une question légitime se pose : quelle est la différence entre string et String en C# ? S'agit-il de types différents ? L'un est-il plus rapide ? Ou est-ce simplement un caprice des développeurs du langage ?

\n\n

Indice : il n'y a pas de différence. Mais ce n'est pas aussi simple qu'il y paraît à première vue. Examinons cela en profondeur, afin que vous non seulement connaissiez la réponse à une question populaire sur Stack Overflow, mais que vous compreniez aussi pourquoi c'est fait ainsi et quelle option est préférable d'utiliser dans des projets réels.

\n\n

Réponse courte : string est un alias pour System.String

\n\n

En C#, le mot-clé string n'est qu'un alias pour la classe System.String. De la même manière que int est un alias pour System.Int32, et bool pour System.Boolean.

\n\n

Lorsque le compilateur voit string, il substitue automatiquement System.String. Cela signifie que les deux déclarations sont compilées dans le même code IL :

\n\n
// Ces deux lignes sont absolument identiques au niveau IL\nstring a = "Hello";\nSystem.String b = "World";
\n\n

Si vous ouvrez le fichier .dll ou .exe compilé via ILSpy ou dotPeek, vous ne trouverez aucune différence entre ces deux déclarations.

\n\n

Mais pourquoi les deux options existent-elles alors ?

\n\n

Historiquement, C# a hérité de la syntaxe du C/C++, où string n'est pas un mot-clé, mais une classe. Les développeurs de .NET ont décidé d'ajouter des alias pratiques pour que le code paraisse plus naturel et familier aux programmeurs venant d'autres langages.

\n\n

De plus, les alias ne nécessitent pas d'importer l'espace de noms. Pour utiliser String, il faut soit ajouter using System;, soit écrire le nom complet System.String. Avec string, il n'y a pas ce problème — il est toujours accessible.

\n\n

Quand utiliser string et quand utiliser String ?

\n\n

La règle d'or, soutenue par la plupart des équipes et recommandée par Microsoft dans la documentation C# :

\n\n
    \n
  • Utilisez string pour déclarer des variables, des paramètres de méthodes, des valeurs de retour — partout où ce mot-clé fonctionne comme un type.
  • \n
  • Utilisez String uniquement pour accéder aux méthodes statiques de la classe (par exemple, String.IsNullOrEmpty()) ou lorsque vous utilisez System.String dans les rares cas où vous devez spécifier explicitement l'espace de noms.
  • \n
\n\n

Pourquoi cela ? Parce que string est un mot-clé du langage, il est surligné en couleur dans l'IDE et on comprend immédiatement qu'il s'agit d'une chaîne. String n'est qu'un nom de classe, et il est plus facile de le confondre avec d'autres classes.

\n\n

Exemple de bon style

\n\n
// Déclaration de variable (on utilise string)\nstring userName = "Ivan";\n\n// Appel d'une méthode statique (on utilise String)\nif (String.IsNullOrEmpty(userName))\n{\n    Console.WriteLine("Le nom ne peut pas être vide");\n}\n\n// Paramètre de méthode (on utilise string)\npublic void Greet(string name)\n{\n    Console.WriteLine($"Bonjour, {name} !");\n}
\n\n

Y a-t-il une différence de performance ?

\n\n

De nombreux développeurs se demandent : string est-il plus rapide que String ? Ou l'inverse ?

\n\n

Réponse : il n'y a aucune différence de performance. Aucune. Absolument. Après la compilation, les deux options se transforment en un code IL identique. Le temps d'ex

Blogs

Book Recommendations