viernes, 25 de abril de 2014

El Método ToString en C#

Tabla de Contenido

0. Introducción
1. El Método ToString
1.1 Modificador virtual
1.2 Ejemplos
1.2.1 ToString en la clase object
1.2.2 Omisión del a sobreescritura de ToString en un tipo derivado
1.2.3 Sobreescritura de ToString
1.3 Boxing en ToString
2. Conclusiones
3. Glosario
4. Enlaces & Literatura

0. Introducción

Ya hemos del sistema unificado de tipos del Framework .NET. Sistema establece características y comportamiento común para todos los objetos de la jerarquía de herencia de tipos integrados y los propios escritos por el programador. Uno de esos comportamientos en particular es el método ToString, el cual es capaz de retornar la representación de un objeto como una cadena de caracteres sobre cualquier tipo de objeto.

1. El Método ToString

Ya mencioné en la introducción a este artículo acerca del sistema unificado de tipos del Framework .NET. Esto se traduce en el uso/implementación de funcionalidad básico de todos los tipos integrados en el Framework, y los propios definidos por el usuario. Ahora vamos a ver cómo uno de esos elementos de herencia es parte de este sistema y el papel que juega en el Framework:

Empecemos por conocer la firma del método ToString [5]:


public virtual string ToString()

Ahora hagamos desollemos este método:
  • public: La funcionalidad básica para un sistema unificado de tipos debe poseer especificado este modificador de acceso, pues debe ser utilizado (sobreescrito, precisamente).
  • virtual: Corresponde con la característica de mutuación de la definición de una función miembro (método, indizador, propiedades, eventos) en el objeto que hereda de una clase padre. -cfr. Miembros Función Virtuales en C#-
  • string: Retorna un objeto de esta naturaleza para representar el objeto como una cadena de caracteres [4].
De acuerdo con [5], el método ToString es la función miembro para formatear la representación de objetos más usada y extendida del Framework .NET. Esto se debe a la naturaleza virtual. Véamoslo con más detalle.

1.1 Modificador virtual

Este modificador para funciones miembro de un tipo de objeto permite la modificación -sobreescritura- en cualquier subtipo derivado de la clase que desee redefinir la implementación por su propio. Por ejemplo, en la jerarquía de herencia de Figura:
Jerarquía de herencia de Figura
Figura 1. Jerarquía de herencia de Figura.

La clase figura tiene definido el método Area de la siguiente manera:


public virtual double Area ()
{
return x * y;
}


Las clases Circulo, Esfera, y Cilindro. Sobreescribirán este método para especificar el método de cálculo de área según su forma o dimensión. Asumamos por caso la sobreescritura del método Area en la clase Circulo:

public virtual double Area ()
{
return Math.PI * Math.Pow( r, 2.0);
}

[Nota: Para mayor información leer Miembros Función Virtuales en C#.]

1.2 Ejemplos

1.2.1 ToString en la clase object

Con este ejemplo quiero demostrar que la implementación genérica de ToString retorna el nombre de clase completamente calificado (FQCN, por sus siglas en inglés):


Cuando se invoque el método ToString sobre la instancia obj (tipo object) se generará la representación genérica de cadena de caracteres de este tipo de objeto.

Prueba de ejecución.

1.2.2 Omisión de la sobreescritura de ToString en un tipo derivado

Estudiemos este otro ejemplo, en donde la clase NuevaClase hereda implícitamente de object, pero no se realiza ninguna sobreescritura del método ToString de su clase padre (superclase):

Archivo OmisionSobreescrituraToString.cs:



En esta clase seguimos obteniendo el nombre de clase completamente calificado porque no hemos sobreescrito al método ToString en la clase derivada (NuevaClase).

> Prueba de ejecución.

1.2.3 Sobreescritura de ToString

Vamos a crear una clase que sobreescriba el método ToString, en la nueva implementación vamos a mostrar el tipo de objeto, incluído un valor numérico (tipos por valor). Así:


En la línea 30 se invoca a través de base -cfr. Construcción Sintáctica base en C#- la implementación genérica de ToString (es decir, muestra la cadena con el nombre de clase completamente calificado). Enseguida, la representación en cadena de caracteres de la variable de tipo por valor. Recordemos esto:

int x = 1;
string s = x.ToString(); // valor de s "1"

> Prueba de ejecución.

1.3 Boxing en ToString

En [1] nos advierten:
Boxing en ToString
Figura 2. Boxing en ToString.

Conclusiones

Hemos aprendido que el método ToString pertenece al sistema unificado de tipos. La implementación por defecto genera el nombre de clase completamente calificado. Nosotros como programadores podemos cambiar este comportamiento en nuestros tipos derivados, sobreescribiendo el método el método. Por otro lado, presenté varios ejemplos en donde queda claro, a través de casos especiales, el comportamiento de este método. Al final incluí una advertencia sobre el efecto boxing sobre ToString.

Glosario


  • FQCN
  • Nombre de clase completamente calificado
  • Sobreescritura
  • Tipo
  • virtual

Enlaces & Literatura

[1]: C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
[2]: Orientación a Objetos en C# - http://ortizol.blogspot.com/2013/06/orientacion-objetos-en-c.html
[3]: Miembros Función Virtuales en C# - http://ortizol.blogspot.com/2013/12/miembros-funcion-virtuales-en-c.html
[4]: String Class (System) - http://msdn.microsoft.com/en-us/library/system.string.aspx
[5]: Object.ToString Method (System) - http://msdn.microsoft.com/en-us/library/system.object.tostring%28v=vs.110%29.aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.