Menu
Coddy logo textTech

Sobrescrita de ToString()

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 38 de 70.

Toda classe em C# herda de object, que fornece um método ToString(). Por padrão, ele retorna o nome do tipo totalmente qualificado - não muito útil quando você deseja ver os dados reais de um objeto.

Você pode sobrescrever ToString() para retornar uma representação de string significativa do seu 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)";
    }
}

Agora, quando você imprime ou concatena um objeto Person, você obtém uma saída legível:

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

Sem o override, isso imprimiria algo como MyNamespace.Person. A palavra-chave override é obrigatória porque você está substituindo o método herdado de object. Isso é especialmente valioso para depuração e logging, onde você precisa de uma visão rápida do estado de um objeto.

challenge icon

Desafio

Fácil

Vamos construir uma classe Book que forneça representações de string significativas quando impressa, tornando a depuração e a exibição de informações do livro muito mais intuitivas.

Você organizará seu código em dois arquivos:

  • Book.cs: Crie uma classe Book no namespace Library que represente um livro com seus detalhes essenciais. Seu livro deve ter:
    • Três propriedades somente leitura: Title (string), Author (string) e Year (int)
    • Um construtor que aceita title, author e year nessa ordem
    • Um método ToString() sobrescrito que retorna uma string formatada: "{Title}" by {Author} ({Year})
    Observe que o título deve estar entre aspas duplas na saída!
  • Program.cs: No seu arquivo principal, crie um objeto Book usando os valores de entrada e imprima-o diretamente. Graças à sua sobrescrita de ToString(), passar o objeto do livro para Console.WriteLine() exibirá automaticamente as informações formatadas em vez do nome do tipo.

Você receberá três entradas:

  • Título do livro (string)
  • Nome do autor (string)
  • Ano de publicação (inteiro)

Imprima o objeto do livro diretamente usando Console.WriteLine().

Por exemplo, se as entradas forem The Great Gatsby, F. Scott Fitzgerald e 1925, a saída deve ser:

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

A mágica aqui é que você não está chamando ToString() explicitamente - quando você passa um objeto para Console.WriteLine(), ele chama automaticamente o método ToString() do objeto. Sua sobrescrita torna essa saída útil em vez de apenas mostrar Library.Book!

Folha de consulta

Cada classe em C# herda de object, que fornece um método ToString(). Por padrão, ele retorna o nome do tipo totalmente qualificado.

Sobrescreva ToString() para retornar uma representação de string 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)";
    }
}

Quando você imprime um objeto, ToString() é chamado automaticamente:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30 anos de idade)

A palavra-chave override é necessária ao substituir um método herdado de object.

Experimente você mesmo

using System;
using Library;

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

        // TODO: Criar um objeto Book usando os valores de entrada

        // TODO: Imprimir o objeto book diretamente usando Console.WriteLine()
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos