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.
Défi
FacileConstruisons 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 classeBookdans l'espace de nomsLibraryqui représente un livre avec ses détails essentiels. Votre livre doit avoir :- Trois propriétés en lecture seule :
Title(string),Author(string), etYear(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})
- Trois propriétés en lecture seule :
Program.cs: Dans votre fichier principal, créez un objetBooken utilisant les valeurs d'entrée et affichez-le directement. Grâce à votre surcharge deToString(), 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()
}
}
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
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et Utilisateur