Menu
Coddy logo textTech

La classe de base 'object'

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

En C#, chaque classe que vous créez hérite automatiquement d'une classe spéciale appelée object. Même lorsque vous ne spécifiez pas explicitement de classe de base, votre classe a toujours object comme ancêtre ultime. Cela signifie que chaque type en C# partage un ensemble commun de méthodes.

La classe object fournit plusieurs méthodes virtuelles que vous pouvez redéfinir dans vos propres classes :

public class Person
{
    public string Name { get; set; }
    
    // Redéfinition depuis object
    public override string ToString()
    {
        return $"Person: {Name}";
    }
    
    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name;
        return false;
    }
    
    public override int GetHashCode()
    {
        return Name?.GetHashCode() ?? 0;
    }
}

Les trois méthodes les plus couramment redéfinies sont ToString() pour la représentation sous forme de chaîne, Equals() pour comparer des objets et GetHashCode() pour les collections basées sur le hachage. Par défaut, ToString() retourne le nom du type et Equals() vérifie l'égalité des références.

Parce que tout hérite de object, vous pouvez stocker n'importe quel type dans une variable object :

object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";

Console.WriteLine(item1.ToString());  // Person: Alice

Cette classe de base universelle est ce qui rend possibles des fonctionnalités telles que les collections contenant des types mixtes, et c'est pourquoi chaque objet en C# a accès à des méthodes telles que ToString() et GetType().

challenge icon

Défi

Facile

Construisons un système de comparaison de livres qui démontre comment la redéfinition des méthodes de la classe de base object donne à vos types personnalisés un comportement significatif pour la représentation sous forme de chaîne et la vérification de l'égalité.

Vous allez créer deux fichiers pour organiser votre code :

  • Book.cs : Définissez une classe Book dans l'espace de noms Library. Votre livre doit avoir des propriétés Title (string) et Author (string), ainsi qu'un constructeur qui définit ces deux valeurs. Redéfinissez les trois méthodes clés héritées de object :
    • ToString() doit retourner "{Title} by {Author}"
    • Equals(object obj) doit retourner true si l'autre objet est un Book avec les mêmes Title et Author
    • GetHashCode() doit combiner les codes de hachage des deux propriétés
  • Program.cs : Dans votre fichier principal, créez deux livres en utilisant les valeurs d'entrée. Affichez chaque livre en utilisant ToString(), puis vérifiez s'ils sont égaux et affichez le résultat. Enfin, démontrez que vous pouvez stocker un Book dans une variable object et obtenir toujours une sortie significative lors de l'appel à ToString().

Vous recevrez quatre entrées :

  • Le titre du premier livre
  • L'auteur du premier livre
  • Le titre du deuxième livre
  • L'auteur du deuxième livre

Affichez la sortie dans ce format :

Book 1: {ToString result}
Book 2: {ToString result}
Are they equal? {True/False}
Stored as object: {ToString result of first book stored in object variable}

Par exemple, si les entrées sont 1984, George Orwell, 1984, et George Orwell, la sortie doit être :

Book 1: 1984 by George Orwell
Book 2: 1984 by George Orwell
Are they equal? True
Stored as object: 1984 by George Orwell

Si les entrées sont 1984, George Orwell, Brave New World, et Aldous Huxley, la sortie doit être :

Book 1: 1984 by George Orwell
Book 2: Brave New World by Aldous Huxley
Are they equal? False
Stored as object: 1984 by George Orwell

Remarquez comment vos méthodes redéfinies donnent aux objets Book un comportement significatif - ils s'affichent joliment sous forme de chaînes de caractères et peuvent être comparés par leur contenu plutôt que par leurs seules références mémoire !

Aide-mémoire

En C#, chaque classe hérite automatiquement de la classe object, qui fournit plusieurs méthodes virtuelles pouvant être remplacées :

Méthodes d'objet courantes à remplacer

  • ToString() - Retourne une représentation sous forme de chaîne de l'objet (par défaut, retourne le nom du type)
  • Equals(object obj) - Compare les objets pour l'égalité (par défaut, vérifie l'égalité de référence)
  • GetHashCode() - Retourne un code de hachage pour une utilisation dans des collections basées sur le hachage

Remplacement des méthodes d'objet

public class Person
{
    public string Name { get; set; }
    
    // Remplacer ToString pour une représentation de chaîne personnalisée
    public override string ToString()
    {
        return $"Person: {Name}";
    }
    
    // Remplacer Equals pour une comparaison basée sur le contenu
    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name;
        return false;
    }
    
    // Remplacer GetHashCode pour les collections basées sur le hachage
    public override int GetHashCode()
    {
        return Name?.GetHashCode() ?? 0;
    }
}

Classe de base universelle

N'importe quel type peut être stocké dans une variable object :

object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";

Console.WriteLine(item1.ToString());  // Person: Alice

Cet héritage universel permet des collections qui contiennent des types mixtes et garantit que chaque objet a accès à des méthodes telles que ToString() et GetType().

Essayez vous-même

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // Lire les entrées pour deux livres
        string title1 = Console.ReadLine();
        string author1 = Console.ReadLine();
        string title2 = Console.ReadLine();
        string author2 = Console.ReadLine();

        // TODO: Créer deux objets Book en utilisant les valeurs d'entrée

        // TODO: Afficher Book 1 en utilisant ToString()
        // Format: "Book 1: {ToString result}"

        // TODO: Afficher Book 2 en utilisant ToString()
        // Format: "Book 2: {ToString result}"

        // TODO: Vérifier si les livres sont égaux et afficher le résultat
        // Format: "Are they equal? {True/False}"

        // TODO: Stocker le premier livre dans une variable object et l'afficher
        // Format: "Stored as object: {ToString result}"
    }
}
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