En C#, quelle est la différence entre String
et string
? (note le cas)
Exemple:
string s = "Hello, World";
String S = "Hello, World";
Aussi, quelles sont les lignes directrices pour l'utilisation de chacun?
En C#, quelle est la différence entre String
et string
? (note le cas)
Exemple:
string s = "Hello, World";
String S = "Hello, World";
Aussi, quelles sont les lignes directrices pour l'utilisation de chacun?
string
est un alias pour System.String
. Donc, techniquement, il n'y a pas de différence. C'est comme int
vs System.Int32
.
Aussi loin que les lignes directrices, je pense qu'il est généralement recommandé d'utiliser string
tout moment 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 avez besoin de se référer spécifiquement à la classe.
par exemple
string greet = String.Format("Hello {0}!", place);
C'est le style que Microsoft a tendance à l'utiliser dans leurs exemples.
Il semble que les orientations dans ce domaine peuvent avoir changé, comme StyleCop maintenant, impose l'utilisation de C#spécifiques des alias.
Juste par souci d'exhaustivité, voici un brain dump de l'information connexe...
Comme d'autres l'ont noté, string
est un alias pour System.String
. Ils compiler le même code, donc au moment de l'exécution il n'y a pas de différence que ce soit. Ceci est juste l'un des pseudonymes en C#. La liste complète est:
object: System.Object
string: System.String
bool: System.Boolean
byte: System.Byte
sbyte: System.SByte
short: System.Int16
ushort: System.UInt16
int: System.Int32
uint: System.UInt32
long: System.Int64
ulong: System.UInt64
float: System.Single
double: System.Double
decimal: System.Decimal
char: System.Char
Hormis string
, object
, les alias sont tous des types de valeur. decimal
est un type de valeur, mais pas un type primitif dans le CLR. Le seul type primitif qui n'a pas d'alias est - System.IntPtr
.
Dans la spécification, la valeur de type alias sont connus comme des "types simples". Les littéraux peuvent être utilisés pour des valeurs constantes de chaque type simple; pas d'autres types de valeurs ont littérale des formulaires disponibles. (A comparer avec VB, ce qui permet d' DateTime
littéraux, et a un alias pour elle aussi.)
Il est une circonstance dans laquelle vous avez à utiliser les alias: quand spécifiant explicitement un enum type sous-jacent. Par exemple:
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
Enfin, quand il s'agit de: personnellement, j'utilise l'alias de partout pour la mise en œuvre, mais le type CLR pour les Api. Il vraiment n'importe pas trop lequel vous utilisez en termes de mise en œuvre, la cohérence entre votre équipe est sympa, mais personne d'autre est d'aller aux soins. D'autre part, il est vraiment important que si vous vous référez à un type dans une API, vous le faites dans une langue neutre. Une méthode appelée ReadInt32
est sans ambiguïté, tandis qu'une méthode appelée ReadInt
nécessite une interprétation. L'appelant pouvait être l'aide d'un langage qui définit un int
alias Int16
, par exemple. L' .NET framework concepteurs ont suivi ce modèle, de bons exemples dans l' BitConverter
, BinaryReader
et Convert
les classes.
String
représente System.String
et il est un .NET Framework type. string
est un alias dans le langage C# pour System.String
. Deux d'entre eux sont compilées System.String
IL (Intermediate Language), donc il n'y a pas de différence. Choisir ce que vous aimez et l'utiliser. Si tu code en C#, je préfère string
que c'est un type C# alias et bien connu par C#, programmeurs.
Je peux dire la même chose (int
, System.Int32
) etc..
La meilleure réponse que j'ai jamais entendu parler de l'aide du type d'alias en C# vient d'Jeffrey Richter dans son livre CLR Via C#. Voici ses 3 raisons:
- J'ai vu un certain nombre de développeurs confuse, ne sachant pas si l'utilisation de la chaîne ou Chaîne dans leur code. Parce qu'en C# la chaîne de caractères (un mot-clé) cartes exactement à ce Système.Chaîne (FCL), il n'y a pas de différence et peuvent être utilisés.
- En C#, le long des cartes de Système.Int64, mais dans un autre langage de programmation, longue pourrait correspondre à une Int16 ou Int32. En fait, C++/CLI n'est en fait traiter long comme un Int32. Quelqu'un de lire le code source dans un langage facilement mal interpréter le code de l'intention, si il ou elle ont été utilisés pour la programmation dans un autre langage de programmation. En fait, la plupart des langues n'a même pas de traiter long comme un mot-clé et de ne pas compiler le code qui l'utilise.
- Le FCL a beaucoup de méthodes qui ont des noms de type dans le cadre de leurs noms de méthode. Par exemple, le BinaryReader offre des méthodes telles que ReadBoolean, ReadInt32, ReadSingle, et ainsi de suite, et le Système.Convertir offre des méthodes telles que ToBoolean, ToInt32, ToSingle, et ainsi de suite. Même si c'est légal d'écrire le code suivant, la ligne avec flotteur se sent très naturelle pour moi, et il n'est pas évident que la ligne est correcte:
BinaryReader br = new BinaryReader(...);
float val = br.ReadSingle(); // Ok, but feels unnatural
Single val = br.ReadSingle(); // OK and feels good
Donc là vous l'avez. Je pense que ce sont vraiment de bons points. J'ai cependant, de ne pas me retrouver à l'aide de Jeffrey conseils dans mon propre code. Peut-être que je suis trop coincé dans mon C# monde, mais je finis par essayer de faire de mon code ressemble le code de la structure.
la chaîne est un mot réservé, mais la Chaîne est juste un nom de classe. Cela signifie que 'string' ne peut pas être utilisé comme un nom de variable par lui-même.
Si pour certaines raisons vous avez voulu une variable appelée chaîne, vous verriez que la première de ces compile:
StringBuilder String = new StringBuilder(); // compiles
StringBuilder string = new StringBuilder(); // doesn't compile
Si vous voulez vraiment un nom de variable appelée 'string', vous pouvez utiliser @ comme préfixe :
StringBuilder @string = new StringBuilder();
Une autre différence essentielle : Stackoverflow les met en valeur différemment.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.