c# ejemplos - ¿Cuál es la diferencia entre String y string en C #?




15 Answers

string es un alias en C # para System.String .
Así que técnicamente, no hay diferencia. Es como int vs. System.Int32 .

En cuanto a las pautas, generalmente se recomienda utilizar la string cada vez que se refiera a un objeto.

p.ej

string place = "world";

Del mismo modo, creo que generalmente se recomienda usar String si necesita referirse específicamente a la clase.

p.ej

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

Este es el estilo que Microsoft tiende a usar en sus ejemplos .

Parece que la orientación en esta área puede haber cambiado, ya que StyleCop ahora impone el uso de los alias específicos de C #.

java antes

Ejemplo ( note el caso ):

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

¿Cuáles son las pautas para el uso de cada una? ¿Y cuáles son las diferencias ?




String significa System.String y es un tipo de .NET Framework. string es un alias en el lenguaje C # para System.String . Ambos están compilados para System.String en IL (Intermediate Language), por lo que no hay diferencia. Elige lo que te gusta y usa eso. Si codificas en C #, preferiría una string ya que es un alias de tipo C # y es bien conocido por los programadores de C #.

Puedo decir lo mismo de ( int , System.Int32 ), etc.




string es una palabra reservada, pero String es solo un nombre de clase. Esto significa que la string no se puede usar como un nombre de variable por sí misma.

Si por alguna razón quisieras una variable llamada cadena , solo verías la primera de estas compilaciones:

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

Si realmente desea un nombre de variable llamado cadena , puede usar @ como prefijo:

StringBuilder @string = new StringBuilder();

Otra diferencia crítica: el desbordamiento de pila los resalta de manera diferente.




Ha sido cubierto arriba; sin embargo, no puedes usar la string en la reflexión; Debes usar String .




Prefiero los tipos de .NET mayúsculas (en lugar de los alias) por razones de formato. Los tipos .NET tienen el mismo color que otros tipos de objetos (los tipos de valores son objetos adecuados, después de todo).

Las palabras clave condicionales y de control (como if , switch y return ) son minúsculas y de color azul oscuro (de forma predeterminada). Y preferiría no tener el desacuerdo en uso y formato.

Considerar:

String someString; 
string anotherString; 



C # es un lenguaje que se utiliza junto con el CLR.

string es un tipo en C #.

System.String es un tipo en el CLR.

Cuando use C # junto con la string CLR se asignará a System.String .

Teóricamente, podría implementar un compilador de C # que generara el bytecode de Java. Una implementación sensata de este compilador probablemente asignaría una string a java.lang.String para interoperar con la biblioteca de tiempo de ejecución de Java.




string es solo un alias para System.String . El compilador los tratará de forma idéntica.

La única diferencia práctica es el resaltado de sintaxis que menciona, y que debe escribir using System si usa String .




Ambos son lo mismo. Pero desde la perspectiva de las directrices de codificación, es mejor utilizar una string lugar de una String . Esto es lo que generalmente usan los desarrolladores. por ejemplo, en lugar de usar Int32 , usamos int ya que int es un alias de Int32

FYI "La cadena de palabras clave es simplemente un alias para la clase predefinida System.String ". - C # Language Specification 4.2.3 http://msdn2.microsoft.com/En-US/library/aa691153.aspx




El uso de los tipos de sistema hace que sea más fácil portar entre C # y VB.Net, si te gusta ese tipo de cosas.







String no es una palabra clave y se puede usar como Identificador mientras que la string es una palabra clave y no se puede usar como Identificador. Y en el punto de vista funcional ambos son iguales.




Solo me gustaría agregar esto a la respuesta de lfousts del libro de Ritchers:

La especificación del lenguaje C # dice: "Como cuestión de estilo, el uso de la palabra clave se favorece sobre el uso del nombre completo del tipo de sistema". No estoy de acuerdo con la especificación del lenguaje; Prefiero usar los nombres de tipo FCL y evitar completamente los nombres de tipo primitivos. De hecho, me gustaría que los compiladores ni siquiera ofrecieran los nombres tipográficos primitivos y que los desarrolladores forzados usaran los nombres tipográficos FCL en su lugar. Aquí están mis razones:

No obtuve su opinión antes de leer el párrafo completo.




No hay diferencia.

La palabra clave C # se stringasigna al tipo .NET System.String: es un alias que se ajusta a las convenciones de nomenclatura del idioma.

Del mismo modo, los intmapas a System.Int32.




Hay una cita sobre este tema del libro de Daniel Solis .

Todos los tipos predefinidos se asignan directamente a los tipos .NET subyacentes. Los nombres de tipo C # (cadena) son simplemente alias para los tipos .NET (String o System.String), por lo que el uso de los nombres .NET funciona bien sintácticamente, aunque no se recomienda. Dentro de un programa de C #, debe usar los nombres de C # en lugar de los nombres de .NET.




Sí, eso no es una diferencia entre ellos, al igual que el booly Boolean.




Related

c# .net string types alias