Menu
Coddy logo textTech

A Palavra-chave 'base'

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

Quando uma classe derivada herda de uma classe base, você frequentemente precisa acessar os membros da classe pai diretamente. A palavra-chave base fornece essa conexão, permitindo que você chame o construtor da classe base ou acesse seus métodos e propriedades.

O uso mais comum de base é chamar o construtor da classe pai. Ao criar um objeto derivado, você pode passar valores para a classe base:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

A sintaxe : base(name) chama o construtor Animal antes que o corpo do construtor Dog seja executado. Isso garante que a classe base seja inicializada corretamente primeiro.

Você também pode usar base para chamar métodos pai de dentro da classe derivada:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Chama o Speak do Animal
        Console.WriteLine("Woof!");
    }
}

Aqui, base.Speak() chama explicitamente a versão do método da classe pai. Isso é útil quando você deseja estender o comportamento da classe pai em vez de substituí-lo completamente.

challenge icon

Desafio

Fácil

Vamos construir um sistema de inventário de produtos que demonstra como as classes derivadas usam a palavra-chave base para inicializar corretamente sua classe pai e estender o comportamento herdado.

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

  • Product.cs: Defina uma classe Product no namespace Inventory. Esta classe base representa qualquer produto com uma propriedade Name (string) e uma propriedade Price (decimal). Inclua um construtor que aceite ambos os valores e um método GetInfo() que retorne "{Name}: ${Price}".
  • ElectronicProduct.cs: Defina uma classe ElectronicProduct no namespace Inventory que herda de Product. Esta classe adiciona uma propriedade WarrantyMonths (int). O construtor deve aceitar nome, preço e meses de garantia - use base para passar o nome e o preço para o construtor pai. Crie um método GetInfo() que primeiro chama o GetInfo() do pai usando base, e então anexa " (Warranty: {WarrantyMonths} months)" para estender a saída.
  • Program.cs: No seu arquivo principal, crie um ElectronicProduct usando os valores de entrada e exiba suas informações completas chamando GetInfo().

Você receberá três entradas:

  • Nome do produto
  • Preço
  • Meses de garantia

Imprima o resultado da chamada de GetInfo() no seu produto eletrônico.

Por exemplo, se as entradas forem Laptop, 999.99, e 24, a saída deve ser:

Laptop: $999.99 (Warranty: 24 months)

Observe como a classe derivada constrói sobre a saída da classe base em vez de duplicar a lógica. A palavra-chave base permite que você reutilize e estenda o comportamento do pai perfeitamente!

Folha de consulta

A palavra-chave base permite que uma classe derivada acesse membros de sua classe pai.

Use base para chamar o construtor da classe pai:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

A sintaxe : base(name) chama o construtor pai antes que o corpo do construtor da classe derivada seja executado, garantindo a inicialização adequada.

Use base para chamar métodos pai a partir da classe derivada:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Chama o Speak de Animal
        Console.WriteLine("Woof!");
    }
}

Isso permite que você estenda o comportamento do pai em vez de substituí-lo completamente.

Experimente você mesmo

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Ler as entradas
        string name = Console.ReadLine();
        decimal price = Convert.ToDecimal(Console.ReadLine());
        int warrantyMonths = Convert.ToInt32(Console.ReadLine());

        // TODO: Criar um ElectronicProduct com os valores de entrada
        
        // TODO: Imprimir o resultado da chamada de GetInfo() no seu produto eletrônico
        
    }
}
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