¿Por qué el tipo de datos de cadena tiene un método .ToString()
?¿Por qué el tipo de cadena tiene un método .ToString()?
Respuesta
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;
}
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 :)
'int' tiene un método' ToString' así ... –
que me sorprendió :), yo sólo pensaba que C# es como Java, no existe un método toString para esas cosas :) – vodkhang
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
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.
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);
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.
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)
- 1. ¿El método toString() de String tiene algún propósito práctico?
- 2. ¿Por qué StringBuilder no tiene el método IndexOf?
- 3. ¿Por qué Moq no ejecuta el método ToString reemplazado?
- 4. ¿Por qué llamar implícitamente toString en un tipo de valor causar una instrucción de cuadro
- 5. ¿Cómo funciona el método .ToString()?
- 6. ¿Por qué el lenguaje Python no tiene un método writeln()?
- 7. Si una estructura no puede heredar otra clase o estructura, ¿por qué Int32 tiene un método ToString()?
- 8. ToString en cadena nula
- 9. Agregue una cadena vacía vs toString - ¿por qué es malo?
- 10. ¿Por qué XElement no tiene un método GetAttributeValue?
- 11. Soportar ToString (formato de cadena) con tipo de número personalizado
- 12. ¿Por qué el iterador no tiene ningún método de reinicio?
- 13. ¿Por qué ToString() redondea mi doble valor?
- 14. ¿Por qué ObservableCollection no tiene un método RemoveAll?
- 15. ¿Por qué C# HashSets tiene un método Distinct()
- 16. ¿Por qué java.io.File no tiene un método close()?
- 17. ¿Las interfaces tienen el método toString?
- 18. ¿Qué tipo de datos devuelve el método SQLCommand ExecuteScalar()?
- 19. ¿Qué tipo de firma de método prefiere y por qué?
- 20. volver nueva cadena vs .ToString()
- 21. ¿Por qué fold tiene el siguiente tipo en Scala?
- 22. .ToString(), (cadena) o como cadena. Cuándo usar qué?
- 23. ¿Por qué un calificador de tipo en un tipo de retorno no tiene sentido?
- 24. ¿Es seguro asumir generalmente que toString() tiene un costo bajo?
- 25. No se puede invocar toString() en el tipo primitivo int
- 26. toString() un tipo genérico en Java
- 27. ¿Tiene nulo el tipo de objeto?
- 28. Reemplazando el método toString en Scala Enumeration
- 29. ¿Por qué la clase python datetime tiene un método 'fromtimestamp', pero no un método 'totimestamp'? clase
- 30. ¿Por qué mi tipo de devolución no tiene sentido?
excelente respuesta –