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 es necesario acceder directamente a los miembros del padre. La palabra clave base proporciona esta conexión, permitiéndote 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 padre. 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 Animal antes de que se ejecute el cuerpo del constructor Dog. Esto asegura 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

Vamos a construir un sistema de inventario de productos que demuestre cómo las clases derivadas utilizan la palabra clave base para inicializar correctamente su clase base y extender 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; utiliza base para pasar el nombre y el precio al constructor de la clase base. Crea un método GetInfo() que primero llame al GetInfo() del padre usando base, y luego añada " (Warranty: {WarrantyMonths} months)" para extender la salida.
  • Program.cs: En tu archivo principal, crea un ElectronicProduct utilizando 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 construye sobre la salida de la clase base en lugar de duplicar la lógica. ¡La palabra clave base te permite reutilizar y extender el comportamiento del padre sin problemas!

Hoja de referencia

La palabra clave base permite que una clase derivada acceda a los miembros de su clase base.

Use base para llamar al constructor de 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 base antes de que se ejecute el cuerpo del constructor de la clase derivada, asegurando una inicialización adecuada.

Use base para llamar a métodos base desde la clase derivada:

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

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

Esto le permite extender el comportamiento base en lugar de reemplazarlo por completo.

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