MEJOR SITIO PARA DESARROLLADORES WEB
Lenguaje C#. W3Schools lecciones en español

Ua En De

C# Polimorfismo


Polimorfismo y métodos primordiales

Polimorfismo significa "muchas formas" y ocurre cuando tenemos muchas clases que están relacionadas entre sí por herencia.

Como especificamos en el capítulo anterior Herencia nos permite heredar campos y métodos de otra clase. El polimorfismo utiliza esos métodos para realizar diferentes tareas. Esto nos permite realizar una misma acción de diferentes maneras.

Por ejemplo, piense en una clase base llamada Animal que tiene un método llamado animalSound(). Las clases derivadas de animales podrían ser cerdos, gatos, perros, pájaros, y también tienen su propia implementación de un sonido animal (el cerdo gruñe y el gato maúlla, etc.):

Ejemplo

class Animal  // Clase base (padre)
{
  public void animalSound()
  {
    Console.WriteLine("El animal hace un sonido");
  }
}

class Pig : Animal  // Clase derivada (niño)
{
  public void animalSound()
  {
    Console.WriteLine("El cerdo dice: pipi");
  }
}

class Dog : Animal  // Clase derivada (niño)
{
  public void animalSound()
  {
    Console.WriteLine("El perro dice: guau guau");
  }
}

Recuerda del capítulo de C# Herencia que usamos el símbolo : para heredar de una clase.

Ahora podemos crear objetos Pig y Dog y llamar al animalSound() método en ambos:

Ejemplo

class Animal  // Clase base (padre)
{
  public void animalSound()
  {
    Console.WriteLine("El animal hace un sonido");
  }
}

class Pig : Animal  // Clase derivada (niño)
{
  public void animalSound()
  {
    Console.WriteLine("El cerdo dice: pipi");
  }
}

class Dog : Animal  // Clase derivada (niño)
{
  public void animalSound()
  {
    Console.WriteLine("El perro dice: guau guau");
  }
}

class Program
{
  static void Main(string[] args)
  {
    Animal myAnimal = new Animal();  // Crear un objeto Animal
    Animal myPig = new Pig();  // Crear un objeto Pig
    Animal myDog = new Dog();  // Crear un objeto Dog

    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
  }
}

La salida será:

El animal hace un sonido
El animal hace un sonido
El animal hace un sonido

Inténtalo tú mismo »


No es el resultado que estaba buscando

El resultado del ejemplo anterior probablemente no fue el que esperaba. Esto se debe a que el método de la clase base anula el método de la clase derivada cuando comparten el mismo nombre.

Sin embargo, C# proporciona una opción para anular el método de la clase base, agregando la palabra clave virtual al método dentro de la clase base y usando la palabra clave override palabra clave para cada método de clase derivada:

Ejemplo

class Animal  // Clase base (padre)
{
  public virtual void animalSound()
  {
    Console.WriteLine("El animal hace un sonido");
  }
}

class Pig : Animal  // Clase derivada (niño)
{
  public override void animalSound()
  {
    Console.WriteLine("El cerdo dice: pipi");
  }
}

class Dog : Animal  // Clase derivada (niño)
{
  public override void animalSound()
  {
    Console.WriteLine("El perro dice: guau guau");
  }
}

class Program
{
  static void Main(string[] args)
  {
    Animal myAnimal = new Animal();  // Crear un objeto Animal
    Animal myPig = new Pig();  // Crear un objeto Pig
    Animal myDog = new Dog();  // Crear un objeto Dog

    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
  }
}

La salida será:

El animal hace un sonido
El cerdo dice: pipi
El perro dice: guau guau

Inténtalo tú mismo »

¿Por qué y cuándo utilizar "herencia" y "polimorfismo"?

Es útil para la reutilización del código: reutiliza campos y métodos de una clase existente cuando creas una nueva clase.