Menu
Coddy logo textTech

La palabra clave 'base'

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy. Lección 20 de 70.

Cuando una clase derivada hereda de una clase base, a menudo necesitas acceder directamente a los miembros de la clase principal. La palabra clave base proporciona esta conexión, lo que te permite llamar al constructor de la clase base o acceder a sus métodos y propiedades.

El uso más común de base es llamar al constructor de la clase principal. Al crear un objeto derivado, puedes pasar valores a la clase 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;
    }
}

La sintaxis : base(name) llama al constructor de Animal antes de que se ejecute el cuerpo del constructor de Dog. Esto garantiza que la clase base se inicialice correctamente primero.

También puedes usar base para llamar a métodos del padre desde dentro de la clase derivada:

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

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Llama al método Speak de Animal
        Console.WriteLine("Woof!");
    }
}

Aquí, base.Speak() llama explícitamente a la versión del método de la clase base. Esto es útil cuando quieres extender el comportamiento del padre en lugar de reemplazarlo por completo.

challenge icon

Desafío

Fácil

Construyamos un sistema de inventario de productos que demuestre cómo las clases derivadas usan la palabra clave base para inicializar correctamente su clase principal y ampliar el comportamiento heredado.

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

  • Product.cs: Define una clase Product en el espacio de nombres Inventory. Esta clase base representa cualquier producto con una propiedad Name (string) y una propiedad Price (decimal). Incluye un constructor que acepte ambos valores y un método GetInfo() que devuelva "{Name}: ${Price}".
  • ElectronicProduct.cs: Define una clase ElectronicProduct en el espacio de nombres Inventory que herede de Product. Esta clase añade una propiedad WarrantyMonths (int). El constructor debe aceptar el nombre, el precio y los meses de garantía; usa base para pasar el nombre y el precio al constructor de la clase principal. Crea un método GetInfo() que primero llame al GetInfo() de la clase principal usando base y después añada " (Warranty: {WarrantyMonths} months)" para ampliar la salida.
  • Program.cs: En tu archivo principal, crea un ElectronicProduct usando los valores de entrada y muestra su información completa llamando a GetInfo().

Recibirás tres entradas:

  • Nombre del producto
  • Precio
  • Meses de garantía

Imprime el resultado de llamar a GetInfo() en tu producto electrónico.

Por ejemplo, si las entradas son Laptop, 999.99 y 24, la salida debería ser:

Laptop: $999.99 (Warranty: 24 months)

Observa cómo la clase derivada se basa en la salida de la clase base en lugar de duplicar la lógica. ¡La palabra clave base te permite reutilizar y ampliar el comportamiento de la clase principal sin problemas!

Pruébalo tú mismo

using System;
using Inventory;

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

        // TODO: Crear un ElectronicProduct con los valores de entrada
        
        // TODO: Imprimir el resultado de llamar a GetInfo() en tu producto electrónico
        
    }
}
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

Practica por tu cuenta: Compilador de C# online