0Pricing
C# Academy · Lección

Polimorfismo y distribución dinámica

Comprenda el polimorfismo: llame a miembros virtuales mediante una referencia base, use colecciones tipadas como la base, evite ocultar métodos y haga casting de forma segura cuando sea necesario.

Polimorfismo y distribución dinámica es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 3 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.

Descripción general del polimorfismo

Objetivo: use un tipo base y permita que los tipos derivados personalicen el comportamiento.

  • Referencia base, objeto derivado
  • virtual + override → despacho dinámico
  • Colecciones tipadas como la clase base
  • Evite ocultar métodos con new

Conceptos básicos del despacho dinámico

Al llamar a un método virtual, se usa el tipo de runtime del objeto, no el tipo de la variable en tiempo de compilación.

using System;

public class Animal
{
  public virtual string Speak() { return "???"; }
}

public class Cat : Animal
{
  public override string Speak() { return "Meow"; }
}

public class Dog : Animal
{
  public override string Speak() { return "Woof"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Animal a1 = new Cat(); // base reference
    Animal a2 = new Dog();
    Console.WriteLine(a1.Speak()); // Meow
    Console.WriteLine(a2.Speak()); // Woof
  }
}

Polimorfismo en colecciones

Almacene distintos tipos derivados en una List<Base> y llame a los miembros virtuales de forma uniforme.

using System;
using System.Collections.Generic;

public class Shape
{
  public virtual double Area() { return 0.0; }
}

public class Rectangle : Shape
{
  private readonly int _w, _h;
  public Rectangle(int w, int h) { _w = w; _h = h; }
  public override double Area() { return _w * _h; }
}

public class Circle : Shape
{
  private readonly int _r;
  public Circle(int r) { _r = r; }
  public override double Area() { return 3.14159 * _r * _r; }
}

public class Program
{
  public static void Main(string[] args)
  {
    List<Shape> shapes = new List<Shape>();
    shapes.Add(new Rectangle(3, 4));
    shapes.Add(new Circle(2));

    foreach (Shape s in shapes)
    {
      Console.WriteLine("Area = " + s.Area()); // calls correct override
    }
  }
}

Ocultación frente a sobrescritura

Evite la ocultación de métodos (new). Use override para obtener polimorfismo real; la ocultación llama a la versión de la clase base mediante una referencia a la clase base.

using System;

public class Printer
{
  public virtual void Print() { Console.WriteLine("[Base]"); }
}

public class LoudPrinter : Printer
{
  public override void Print() { Console.WriteLine("[LOUD]"); }
}

public class HiddenPrinter : Printer
{
  // Hides the base method instead of overriding (BAD fit for polymorphism)
  public new void Print() { Console.WriteLine("[HIDDEN]"); }
}

public class Program
{
  public static void Main(string[] args)
  {
    Printer a = new LoudPrinter();
    Printer b = new HiddenPrinter();

    a.Print(); // [LOUD]  (override works)
    b.Print(); // [Base]  (hiding fails via base reference)
  }
}

Conversión segura (as y comprobación)

Prefiera las llamadas a la clase base o virtuales. Si debe usar miembros exclusivos del tipo derivado, haga una conversión segura (as + comprobación de null).

using System;

public class Vehicle
{
  public virtual string Info() { return "Vehicle"; }
}

public class Car : Vehicle
{
  public bool HasAirConditioning;
  public override string Info() { return "Car"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Vehicle v = new Car();
    Console.WriteLine(v.Info()); // polymorphic call

    // Need a Car-only member? Cast carefully using 'as'
    Car c = v as Car;
    if (c != null)
    {
      c.HasAirConditioning = true;
      Console.WriteLine("AC set: " + c.HasAirConditioning);
    }
    else
    {
      Console.WriteLine("Not a Car");
    }
  }
}

Consejos sobre polimorfismo

Consejos:

  • Diseñe primero pensando en llamadas a la clase base o virtuales.
  • Use override, no new, para cambiar el comportamiento.
  • Mantenga las API base pequeñas y estables.
  • Haga conversiones pocas veces; prefiera el polimorfismo o las interfaces.

Significado del despacho dinámico

Comprobación rápida: ¿Qué significa el despacho dinámico en C#?

Repaso

Repaso: el polimorfismo permite que una llamada a la clase base alcance muchos comportamientos derivados mediante virtual/override. Use colecciones tipadas como la clase base, evite la ocultación con new y haga conversiones solo cuando sea necesario.

Preguntas frecuentes

¿La lección «Polimorfismo y distribución dinámica» es gratis?

Sí — el texto completo de «Polimorfismo y distribución dinámica» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.

¿Qué aprenderé en «Polimorfismo y distribución dinámica»?

Comprenda el polimorfismo: llame a miembros virtuales mediante una referencia base, use colecciones tipadas como la base, evite ocultar métodos y haga casting de forma segura cuando sea necesario. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 3.

¿Cuánto tiempo toma la lección «Polimorfismo y distribución dinámica»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. virtual/override/sealed y clases abstractas
  2. Interfaces (introducción) e implementación de varias interfaces
  3. Polimorfismo y distribución dinámica
← Volver a C# Academy