Menu
Coddy logo textTech

A Classe Base 'object'

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

Em C#, cada classe que você cria herda automaticamente de uma classe especial chamada object. Mesmo quando você não especifica explicitamente uma classe base, sua classe ainda tem object como seu ancestral final. Isso significa que cada tipo em C# compartilha um conjunto comum de métodos.

A classe object fornece vários métodos virtuais que você pode sobrescrever em suas próprias classes:

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

Os três métodos mais comumente sobrescritos são ToString() para representação de string, Equals() para comparar objetos e GetHashCode() para coleções baseadas em hash. Por padrão, ToString() retorna o nome do tipo e Equals() verifica a igualdade de referência.

Como tudo herda de object, você pode armazenar qualquer tipo em uma variável object:

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

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

Esta classe base universal é o que torna possíveis recursos como coleções que contêm tipos mistos, e é por isso que cada objeto em C# tem acesso a métodos como ToString() e GetType().

challenge icon

Desafio

Fácil

Vamos construir um sistema de comparação de livros que demonstra como a sobrescrita de métodos da classe base object fornece aos seus tipos personalizados comportamentos significativos para representação de string e verificação de igualdade.

Você criará dois arquivos para organizar seu código:

  • Book.cs: Defina uma classe Book no namespace Library. Seu livro deve ter as propriedades Title (string) e Author (string), juntamente com um construtor que define ambos os valores. Sobrescreva os três métodos principais herdados de object:
    • ToString() deve retornar "{Title} by {Author}"
    • Equals(object obj) deve retornar true se o outro objeto for um Book com o mesmo Title e Author
    • GetHashCode() deve combinar os códigos de hash de ambas as propriedades
  • Program.cs: No seu arquivo principal, crie dois livros usando valores de entrada. Exiba cada livro usando ToString(), depois verifique se eles são iguais e imprima o resultado. Por fim, demonstre que você pode armazenar um Book em uma variável do tipo object e ainda obter uma saída significativa ao chamar ToString().

Você receberá quatro entradas:

  • Título do primeiro livro
  • Autor do primeiro livro
  • Título do segundo livro
  • Autor do segundo livro

Imprima a saída neste 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 exemplo, se as entradas forem 1984, George Orwell, 1984 e George Orwell, a saída deve ser:

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

Se as entradas forem 1984, George Orwell, Brave New World e Aldous Huxley, a saída deve 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

Observe como seus métodos sobrescritos dão aos objetos Book um comportamento significativo - eles são exibidos de forma amigável como strings e podem ser comparados pelo seu conteúdo, em vez de apenas pelas suas referências de memória!

Folha de consulta

Em C#, toda classe herda automaticamente da classe object, que fornece vários métodos virtuais que podem ser sobrescritos:

Métodos Comuns da Classe Object para Sobrescrever

  • ToString() - Retorna uma representação em string do objeto (o padrão retorna o nome do tipo)
  • Equals(object obj) - Compara objetos para igualdade (o padrão verifica a igualdade de referência)
  • GetHashCode() - Retorna um código hash para uso em coleções baseadas em hash

Sobrescrevendo Métodos da Classe Object

public class Person
{
    public string Name { get; set; }
    
    // Sobrescreve ToString para representação em string personalizada
    public override string ToString()
    {
        return $"Person: {Name}";
    }
    
    // Sobrescreve Equals para comparação baseada em conteúdo
    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name;
        return false;
    }
    
    // Sobrescreve GetHashCode para coleções baseadas em hash
    public override int GetHashCode()
    {
        return Name?.GetHashCode() ?? 0;
    }
}

Classe Base Universal

Qualquer tipo pode ser armazenado em uma variável object:

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

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

Essa herança universal permite coleções que contêm tipos mistos e garante que cada objeto tenha acesso a métodos como ToString() e GetType().

Experimente você mesmo

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // Ler a entrada para dois livros
        string title1 = Console.ReadLine();
        string author1 = Console.ReadLine();
        string title2 = Console.ReadLine();
        string author2 = Console.ReadLine();

        // TODO: Criar dois objetos Book usando os valores de entrada

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

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

        // TODO: Verificar se os livros são iguais e imprimir o resultado
        // Formato: "Are they equal? {True/False}"

        // TODO: Armazenar o primeiro livro em uma variável object e imprimi-lo
        // Formato: "Stored as object: {ToString result}"
    }
}
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