c# caractère spéciaux - Quelle est la différence entre String et string en C #?




15 Answers

string est un alias en C # pour System.String .
Donc techniquement, il n'y a pas de différence. C'est comme int vs System.Int32 .

En ce qui concerne les directives, il est généralement recommandé d’utiliser une string chaque fois que vous faites référence à un objet.

par exemple

string place = "world";

De même, je pense qu'il est généralement recommandé d'utiliser String si vous devez vous référer spécifiquement à la classe.

par exemple

string greet = String.Format("Hello {0}!", place);

C'est le style que Microsoft a tendance à utiliser dans leurs exemples .

Il semble que les indications dans ce domaine ont peut-être changé, car StyleCop impose désormais l'utilisation des alias spécifiques à C #.

operator caractere

Exemple ( notez le cas ):

string s = "Hello world!";
String s = "Hello world!";

Quelles sont les directives pour l'utilisation de chacun? Et quelles sont les différences ?




String représente System.String et il s'agit d'un type .NET Framework. string est un alias dans le langage C # pour System.String . Les deux sont compilés dans System.String en IL (langage intermédiaire), il n'y a donc pas de différence. Choisissez ce que vous aimez et utilisez-le. Si vous codez en C #, je préférerais string car il s’agit d’un alias de type C # bien connu des programmeurs C #.

Je peux dire la même chose à propos de ( int , System.Int32 ), etc.




string est un mot réservé, mais String n'est qu'un nom de classe. Cela signifie que la string ne peut pas être utilisée seule comme nom de variable.

Si pour une raison quelconque vous vouliez une variable appelée chaîne , vous ne verriez que la première de ces compilations:

StringBuilder String = new StringBuilder();  // compiles
StringBuilder string = new StringBuilder();  // doesn't compile 

Si vous voulez vraiment un nom de variable appelé chaîne, vous pouvez utiliser @ comme préfixe:

StringBuilder @string = new StringBuilder();

Autre différence critique: le dépassement de capacité les met en évidence différemment.




C'est couvert ci-dessus; Cependant, vous ne pouvez pas utiliser de string en réflexion; vous devez utiliser String .




Je préfère les types .NET majuscules (plutôt que les alias) pour des raisons de formatage. Les types .NET ont la même couleur que les autres types d'objet (les types de valeur sont des objets appropriés, après tout).

Les mots-clés conditionnels et de contrôle (tels que if , switch et return ) sont en minuscule et en bleu foncé (par défaut). Et je préférerais que le désaccord ne soit pas utilisé ni formaté.

Considérer:

String someString; 
string anotherString; 



C # est un langage qui est utilisé avec le CLR.

string est un type en C #.

System.String est un type dans le CLR.

Lorsque vous utilisez C # avec la string CLR, il est mappé à System.String .

Théoriquement, vous pouvez implémenter un compilateur C # qui génère un bytecode Java. Une implémentation judicieuse de ce compilateur mapperait probablement la string sur java.lang.String afin d’interagir avec la bibliothèque d’exécution Java.




string est juste un alias pour System.String . Le compilateur les traitera de manière identique.

La seule différence pratique est la coloration syntaxique que vous mentionnez, et que vous devez écrire using System si vous utilisez String .




Les deux sont les même. Mais du point de vue des directives de codage, il est préférable d’utiliser string au lieu de String . C'est ce que les développeurs utilisent généralement. par exemple, au lieu d'utiliser Int32 nous utilisons int comme int est alias pour Int32

FYI «La chaîne de mots clés est simplement un alias de la classe prédéfinie System.String .» - Spécification du langage C # 4.2.3 http://msdn2.microsoft.com/En-US/library/aa691153.aspx




L'utilisation des types de système facilite le portage entre C # et VB.Net, si vous êtes dans ce genre de chose.







String n'est pas un mot clé et peut être utilisé comme identifiant, alors que string est un mot clé et ne peut pas être utilisé comme identifiant. Et du point de vue fonctionnel, les deux sont identiques.




Je voudrais juste ajouter ceci à la réponse de lfousts, du livre de Ritchers:

La spécification du langage C # stipule: «En termes de style, l’utilisation du mot clé est préférée à l’utilisation du nom de type de système complet. Je préfère utiliser les noms de type FCL et éviter complètement les noms de type primitifs. En fait, j'aimerais que les compilateurs n'offrent même pas les noms de types primitifs et obligent les développeurs à utiliser les noms de types FCL à la place. Voici mes raisons:

Je n'ai pas eu son avis avant de lire le paragraphe complet.




Il n'y a pas de différence.

Le mot clé C # stringcorrespond au type .NET System.String- il s'agit d'un alias qui respecte les conventions de dénomination du langage.

De même, les intcartes pour System.Int32.




Il y a une citation sur ce numéro du livre de Daniel Solis .

Tous les types prédéfinis sont directement mappés aux types .NET sous-jacents. Les noms de type C # (chaîne) sont simplement des alias pour les types .NET (String ou System.String), de sorte que l'utilisation des noms .NET fonctionne parfaitement syntaxiquement, bien que cela soit déconseillé. Dans un programme C #, vous devez utiliser les noms C # plutôt que les noms .NET.




Oui, il n'y a pas de différence entre eux, tout comme le boolet Boolean.




Related