Menu
Coddy logo textTech

Sobrescritura de ToString()

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 38 de 70.

Cada clase en C# hereda de object, que proporciona un método ToString(). Por defecto, devuelve el nombre de tipo totalmente calificado; no es muy útil cuando quieres ver los datos reales de un objeto.

Puedes sobrescribir ToString() para devolver una representación de cadena significativa de tu objeto:

public class Person
{
    public string Name { get; }
    public int Age { get; }
    
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    
    public override string ToString()
    {
        return $"{Name} ({Age} years old)";
    }
}

Ahora, cuando imprimes o concatenas un objeto Person, obtienes una salida legible:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30 años)

Sin la anulación, esto imprimiría algo como MyNamespace.Person. La palabra clave override es necesaria porque estás reemplazando el método heredado de object. Esto es especialmente valioso para la depuración y el registro, donde necesitas una visión rápida del estado de un objeto.

challenge icon

Desafío

Fácil

Vamos a construir una clase Book que proporcione representaciones de cadena significativas cuando se imprima, haciendo que la depuración y la visualización de la información del libro sean mucho más intuitivas.

Organizarás tu código en dos archivos:

  • Book.cs: Crea una clase Book en el espacio de nombres Library que represente un libro con sus detalles esenciales. Tu libro debe tener:
    • Tres propiedades de solo lectura: Title (string), Author (string) e Year (int)
    • Un constructor que acepte el título, el autor y el año en ese orden
    • Un método ToString() sobrescrito que devuelva una cadena formateada: "{Title}" by {Author} ({Year})
    ¡Ten en cuenta que el título debe estar envuelto en comillas dobles en la salida!
  • Program.cs: En tu archivo principal, crea un objeto Book utilizando los valores de entrada e imprímelo directamente. Gracias a tu sobrescritura de ToString(), pasar el objeto del libro a Console.WriteLine() mostrará automáticamente la información formateada en lugar del nombre del tipo.

Recibirás tres entradas:

  • Título del libro (string)
  • Nombre del autor (string)
  • Año de publicación (integer)

Imprime el objeto del libro directamente usando Console.WriteLine().

Por ejemplo, si las entradas son The Great Gatsby, F. Scott Fitzgerald y 1925, la salida debería ser:

"The Great Gatsby" by F. Scott Fitzgerald (1925)

La magia aquí es que no estás llamando a ToString() explícitamente: cuando pasas un objeto a Console.WriteLine(), este llama automáticamente al método ToString() del objeto. ¡Tu sobrescritura hace que esta salida sea útil en lugar de simplemente mostrar Library.Book!

Hoja de referencia

Cada clase en C# hereda de object, el cual proporciona un método ToString(). Por defecto, este devuelve el nombre completo del tipo (fully qualified type name).

Sobrescriba ToString() para devolver una representación de cadena significativa:

public class Person
{
    public string Name { get; }
    public int Age { get; }
    
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    
    public override string ToString()
    {
        return $"{Name} ({Age} years old)";
    }
}

Cuando imprime un objeto, se llama a ToString() automáticamente:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30 years old)

La palabra clave override es obligatoria cuando se reemplaza un método heredado de object.

Pruébalo tú mismo

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // Leer la entrada
        string title = Console.ReadLine();
        string author = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());

        // TODO: Crear un objeto Book usando los valores de entrada

        // TODO: Imprimir el objeto book directamente usando Console.WriteLine()
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos