Cual es la diferencia entre las palabras claves String y string en C#

Si vienes de un cambio de entorno de programación, por ejemplo de Java, probablemente hayas notado que en C# puedes usar string y String para declarar una cadena de texto en tu código.

String textA = "Hello";
string textB = "Hello";

Y probablemente te hayas preguntas a ti mismo si hay una diferencia entre ellas, es decir, ambas funcionan aparentemente de la misma manera, pero hay alguna diferencia entre ellas? La respuesta es no.

string es tan solo un alias en C# para System.String. Este puede ser comparado con un caso como int y System.Int32, simplemente un entero o de la misma manera que bool y Boolean. Ambos son compilados a System.String en IL (Lenguaje intermedio).

string es una palabra reservada y String es el nombre de una clase. Esto significa que string no puede ser usado como el nombre de una variable por si misma, por ejemplo:

StringBuilder String = new StringBuilder(); // Compile succesfully 
StringBuilder string = new StringBuilder(); // Doesn't compile

Por lo tanto, resulta util usar string pues el código nunca podria fallar (el valor de string nunca cambiaría), sin embargo hay un ligero chance de que el código que usa String lo haga (pues puedes redefinir el valor de String pero no de string).

Si necesitas referirte específicamente a la clase, es recomendable usar String, por ejemplo:

Decimal pricePerOunce = 17.36m; 
String s = String.Format("The current price is {0:C2} per ounce.", pricePerOunce);

string es solo uno de los tanto alias que tiene C# incluido. Puedes ver todos los alias de C# en la siguiente lista:

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

Como se menciono anteriormente, puedes usar los alias sin nisiquiera usar "using System;" al inicio de tu clase.

Conclusión final

string es una palabra clave y no puede ser usada como un identificador.

String no es una palabra clave y puedes usarla como un identificador.

string String = "I am a string";

La palabra clave string es un alias para System.String, aparte del problema de palabra clave, las 2 son equivalentes, por lo tanto:

typeof(string) == typeof(String) == typeof(System.String)

Notas

  • Puedes usar string sin importar ningun component, al contrario de String que no puedes usar si no importas using System; antes.
  • No puedes usar string en una reflexión, debes usar String.
  • Para evitar confusiones, usa solo una de ellas consistentemente. Pero desde la perspectiva de las mejoras practicas, cuando declaras una variable es bueno usar string y cuando te refieres directamente a la clase, usa String.

Esto podría ser de tu interes

Conviertete en un programador más sociable