Menu
Coddy logo textTech

Redéfinition de ToString()

Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 38 sur 70.

Chaque classe en C# hérite de object, qui fournit une méthode ToString(). Par défaut, elle renvoie le nom complet du type — ce qui n'est pas très utile lorsque vous voulez voir les données réelles d'un objet.

Vous pouvez redéfinir ToString() pour retourner une représentation sous forme de chaîne significative de votre objet :

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)";
    }
}

Désormais, lorsque vous affichez ou concaténez un objet Person, vous obtenez une sortie lisible :

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

Sans la substitution, cela afficherait quelque chose comme MyNamespace.Person. Le mot-clé override est requis car vous remplacez la méthode héritée de object. C'est particulièrement utile pour le débogage et la journalisation, où vous avez besoin d'un aperçu rapide de l'état d'un objet.

challenge icon

Défi

Facile

Construisons une classe Book qui fournit des représentations sous forme de chaîne de caractères significatives lorsqu'elle est affichée, rendant le débogage et l'affichage des informations sur le livre beaucoup plus intuitifs.

Vous organiserez votre code sur deux fichiers :

  • Book.cs : Créez une classe Book dans l'espace de noms Library qui représente un livre avec ses détails essentiels. Votre livre doit avoir :
    • Trois propriétés en lecture seule : Title (string), Author (string), et Year (int)
    • Un constructeur qui accepte le titre, l'auteur et l'année dans cet ordre
    • Une méthode ToString() surchargée qui renvoie une chaîne formatée : "{Title}" by {Author} ({Year})
    Notez que le titre doit être entouré de guillemets doubles dans la sortie !
  • Program.cs : Dans votre fichier principal, créez un objet Book en utilisant les valeurs d'entrée et affichez-le directement. Grâce à votre surcharge de ToString(), le passage de l'objet livre à Console.WriteLine() affichera automatiquement les informations formatées au lieu du nom du type.

Vous recevrez trois entrées :

  • Titre du livre (string)
  • Nom de l'auteur (string)
  • Année de publication (integer)

Affichez l'objet livre directement en utilisant Console.WriteLine().

Par exemple, si les entrées sont The Great Gatsby, F. Scott Fitzgerald, et 1925, la sortie doit être :

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

La magie ici est que vous n'appelez pas ToString() explicitement - lorsque vous passez un objet à Console.WriteLine(), il appelle automatiquement la méthode ToString() de l'objet. Votre surcharge rend cette sortie utile au lieu d'afficher simplement Library.Book !

Aide-mémoire

Chaque classe en C# hérite de object, qui fournit une méthode ToString(). Par défaut, elle renvoie le nom complet du type.

Redéfinissez ToString() pour renvoyer une représentation textuelle significative :

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)";
    }
}

Lorsque vous affichez un objet, ToString() est appelée automatiquement :

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

Le mot-clé override est requis lors du remplacement d'une méthode héritée de object.

Essayez vous-même

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // Lire l'entrée
        string title = Console.ReadLine();
        string author = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());

        // TODO: Créer un objet Book en utilisant les valeurs d'entrée

        // TODO: Afficher l'objet book directement en utilisant Console.WriteLine()
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet