2010-05-06 18 views

Respuesta

61

El tipo System.String, como almost todos los tipos en .NET, deriva de System.Object. Object tiene un método ToString() y String hereda este método. Es un método virtual y String lo reemplaza para devolver una referencia a sí mismo en lugar de usar la implementación predeterminada que es devolver el nombre del tipo.

De Reflector, esta es la implementación de ToString en Object:

public virtual string ToString() 
{ 
    return this.GetType().ToString(); 
} 

Y esta es la anulación de String:

public override string ToString() 
{ 
    return this; 
} 
+0

excelente respuesta –

1

de cuerdas es un objeto, no es un tipo de datos. Como String es un objeto, hereda del método Root Object el método ToString().

Es igual que en Java, Objective-C o Scala :)

+2

'int' tiene un método' ToString' así ... –

+0

que me sorprendió :), yo sólo pensaba que C# es como Java, no existe un método toString para esas cosas :) – vodkhang

+0

no está en mayúscula porque es un alias. Después de compilar, ese alias se convertirá en la cadena de caracteres en mayúscula – vodkhang

1

Esto es cierto incluso para Java, creo que la mayoría de los lenguajes de programación orientados a objetos tienen esto, una representación de cadena de objetos en cuestión, ya que cada La clase que creas por defecto extedns de Object, lo que resulta en tener el método toString(), recuerda que solo es aplicable a objetos que no sean para tipos de premitive.

9

Como Mark señala, solo está devolviendo una referencia a sí mismo. ¿Pero Por qué es importante? Todos los tipos básicos deben devolver una representación de cadena de sí mismos. Imagine una función de registro que funcionaba así:

public void Log(object o) { 
    Console.WriteLine(o.ToString()); 
} 

Esto le permite pasar cualquier tipo básico y registrar su contenido. Sin cadena que se devuelva, simplemente imprimirá "Cadena" en lugar de su contenido. También podría hacer lo mismo con una función de plantilla.

¿Crees que esto es tonto? Eso es básicamente lo que hacen las funciones de formateo de cadenas. Se llama "ToString" cuando se hace esto:

Console.WriteLine("{0}", myString); 
0

Cualquier objeto en C# tiene un método para cuerdas, aunque no puedo pensar en una razón por qué se podría convertir una cadena a una cadena en el momento en que el ToString() se hereda del tipo de objeto, por supuesto, una cadena es un ejemplo de.

0

Obtendrá una excepción de referencia nula si su cadena es NULL y utiliza .ToString();

A continuación se tirará:

string.Format("msgBoxTitle = {0}", msgBoxTitle.ToString()) 

mejor que acaba de escribir ... Esto no va a lanzar.

string.Format("msgBoxTitle = {0}", msgBoxTitle) 
Cuestiones relacionadas