Menu
Coddy logo textTech

La clase base 'object'

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

En C#, cada clase que creas hereda automáticamente de una clase especial llamada object. Incluso cuando no especificas explícitamente una clase base, tu clase sigue teniendo a object como su ancestro final. Esto significa que cada tipo en C# comparte un conjunto común de métodos.

La clase object proporciona varios métodos virtuales que puedes sobrescribir en tus propias clases:

public class Person
{
    public string Name { get; set; }
    
    // Sobrescribir de 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;
    }
}

Los tres métodos que se sobrescriben con más frecuencia son ToString() para la representación de cadenas, Equals() para comparar objetos, y GetHashCode() para colecciones basadas en hash. Por defecto, ToString() devuelve el nombre del tipo, y Equals() comprueba la igualdad de referencia.

Debido a que todo hereda de object, puedes almacenar cualquier tipo en una variable object:

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

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

Esta clase base universal es lo que hace posible características como las colecciones que contienen tipos mixtos, y es por eso que cada objeto en C# tiene acceso a métodos como ToString() y GetType().

challenge icon

Desafío

Fácil

Vamos a construir un sistema de comparación de libros que demuestre cómo sobrescribir métodos de la clase base object otorga a tus tipos personalizados un comportamiento significativo para la representación de cadenas y la comprobación de igualdad.

Crearás dos archivos para organizar tu código:

  • Book.cs: Define una clase Book en el espacio de nombres Library. Tu libro debe tener las propiedades Title (string) y Author (string), junto con un constructor que establezca ambos valores. Sobrescribe los tres métodos clave heredados de object:
    • ToString() debe devolver "{Title} by {Author}"
    • Equals(object obj) debe devolver true si el otro objeto es un Book con el mismo Title y Author
    • GetHashCode() debe combinar los códigos hash de ambas propiedades
  • Program.cs: En tu archivo principal, crea dos libros utilizando valores de entrada. Muestra cada libro usando ToString(), luego verifica si son iguales e imprime el resultado. Finalmente, demuestra que puedes almacenar un Book en una variable de tipo object y seguir obteniendo una salida significativa al llamar a ToString().

Recibirás cuatro entradas:

  • Título del primer libro
  • Autor del primer libro
  • Título del segundo libro
  • Autor del segundo libro

Imprime la salida en este formato:

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}

Por ejemplo, si las entradas son 1984, George Orwell, 1984 y George Orwell, la salida debería ser:

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

Si las entradas son 1984, George Orwell, Brave New World y Aldous Huxley, la salida debería ser:

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

¡Observa cómo tus métodos sobrescritos otorgan a los objetos Book un comportamiento significativo: se muestran de forma agradable como cadenas y pueden compararse por su contenido en lugar de solo por sus referencias de memoria!

Hoja de referencia

En C#, cada clase hereda automáticamente de la clase object, la cual proporciona varios métodos virtuales que pueden ser sobrescritos:

Métodos comunes de Object para sobrescribir

  • ToString() - Devuelve una representación en cadena del objeto (por defecto devuelve el nombre del tipo)
  • Equals(object obj) - Compara objetos para verificar la igualdad (por defecto verifica la igualdad de referencia)
  • GetHashCode() - Devuelve un código hash para su uso en colecciones basadas en hash

Sobrescribir métodos de Object

public class Person
{
    public string Name { get; set; }
    
    // Sobrescribir ToString para una representación en cadena personalizada
    public override string ToString()
    {
        return $"Person: {Name}";
    }
    
    // Sobrescribir Equals para una comparación basada en el contenido
    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name;
        return false;
    }
    
    // Sobrescribir GetHashCode para colecciones basadas en hash
    public override int GetHashCode()
    {
        return Name?.GetHashCode() ?? 0;
    }
}

Clase base universal

Cualquier tipo puede ser almacenado en una variable object:

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

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

Esta herencia universal permite colecciones que contienen tipos mixtos y asegura que cada objeto tenga acceso a métodos como ToString() y GetType().

Pruébalo tú mismo

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // Leer la entrada para dos libros
        string title1 = Console.ReadLine();
        string author1 = Console.ReadLine();
        string title2 = Console.ReadLine();
        string author2 = Console.ReadLine();

        // TODO: Crear dos objetos Book utilizando los valores de entrada

        // TODO: Imprimir el Libro 1 usando ToString()
        // Formato: "Book 1: {ToString result}"

        // TODO: Imprimir el Libro 2 usando ToString()
        // Formato: "Book 2: {ToString result}"

        // TODO: Comprobar si los libros son iguales e imprimir el resultado
        // Formato: "Are they equal? {True/False}"

        // TODO: Almacenar el primer libro en una variable de objeto e imprimirlo
        // Formato: "Stored as object: {ToString result}"
    }
}
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