Polimorfismo en C # - Las 2 principales formas de polimorfismo en C # con código

Tabla de contenido:

Anonim

Introducción al polimorfismo en C #

El polimorfismo es uno de los principios de la programación orientada a objetos. Poly significa múltiple y morphing significa experimentar una transformación, por lo tanto, el polimorfismo significa la capacidad de tomar múltiples formas.

La salida de los operadores varía según los tipos de operandos, que es una forma de polimorfismo conocida como sobrecarga del operador. Aquí el operador puede tomar múltiples formas para producir diferentes salidas. La salida de las funciones varía según los diferentes tipos y parámetros de retorno, que es otra forma de polimorfismo conocida como sobrecarga de funciones. Aquí, la función toma múltiples formas para producir múltiples salidas.

El polimorfismo se usa ampliamente para implementar la herencia. Los objetos que tienen una estructura interna diferente pueden implementar una interfaz común a través del polimorfismo. El siguiente diagrama ilustra el funcionamiento del polimorfismo:

Esta figura explica que la arcilla es el objeto principal a partir del cual se hacen ollas, tazones y objetos de juguete. Todos estos objetos son diferentes entre sí, pero tienen las propiedades de la arcilla. Estos tres objetos tienen diferentes formas y se usan de diferentes maneras, incluso cuando están hechos del mismo material de arcilla.

Formas de polimorfismo

A continuación se presentan las 2 formas de polimorfismo:

1. Sobrecarga del operador

Un operador puede dar diferentes salidas en función del tipo de operandos en los que está operando. Esto se llama sobrecarga del operador. Por ejemplo, el operador '+' puede realizar sumas en dos enteros, mientras que puede concatenar dos cadenas. Por lo tanto, el mismo operador se puede utilizar de 2 maneras diferentes. El operador de suma generalmente agrega dos números. Sin embargo, en el caso de números complejos, la suma es un poco diferente, donde las partes reales correspondientes y las partes imaginarias se agregan por separado. Aquí hay un código de ejemplo que muestra cómo se puede sobrecargar el operador '+' para agregar números complejos:

Código:

using System;
namespace Overload (
class Complex
(
public double x;
public double y;
// no-argument constructor
public Complex() ()
// parameterized constructor
public Complex(double real, double img)
(
x = real;
y = img;
)
// Overloading of Binary "+" operator
public static Complex operator + (Complex c1,
Complex c2)
(
Complex c3 = new Complex();
c3.x = c1.x + c2.x;
c3.y = c1.y + c2.y;
return c3;
)
// function to display result
public void display()
(
Console.WriteLine("(0) + (1)i", x, y);
)
)
class CalNum (
// Driver Code
static void Main(string() args)
(
Complex num1 = new Complex(2.5, 3.5);
Complex num2 = new Complex(1.2, 6.5);
Complex num3 = num1 + num2;
Console.Write("c1 = ");
num1.display();
Console.Write("c2 = ");
num2.display();
Console.Write("c3 = ");
num3.display();
)
)
)

Salida:

Esta salida ilustra la sobrecarga del operador para agregar dos números complejos. El código muestra la sobrecarga del operador, así como la sobrecarga de funciones.

2. Sobrecarga de funciones

Una función puede proporcionar diferentes salidas en función del número de parámetros, así como sus tipos de retorno y el tipo de retorno de la función. El código mencionado anteriormente también cubre la sobrecarga de funciones utilizando un constructor. Hay 2 constructores en el código; uno es el constructor predeterminado que se deja vacío, mientras que el otro es un constructor parametrizado que se utiliza para inicializar el número complejo con los valores mencionados como parámetros.

Tomando el ejemplo ilustrado en la figura, la función es moldear la arcilla y la dirección del trazo es el miembro provisto para moldear la arcilla. Basado en diferentes direcciones de trazo, la arcilla se transforma en la olla, el tazón y el juguete, respectivamente.

Código:

using System;
using System.Collections.Generic;
public class Clay
(
// A few example members
public int Height ( get; set; )
public int strokeDirection ( get; set; )
// Virtual method
public virtual void Mould()
(
Console.WriteLine("Beginning to mould the clay");
)
)
class Pot : Clay
(
public override void Mould()
(
// Code to make a pot Console.WriteLine("Making a pot");
base.Mould();
)
)
class Bowl : Clay
(
public override void Mould()
(
// Code to make a bowl
Console.WriteLine("Making a bowl");
base.Mould();
)
)
class Toy : Clay
(
public override void Mould()
(
// Code to make a toy
Console.WriteLine("Making a toy");
base.Mould();
)
)
class Program
(
static void Main(string() args)
(
// Illustrating Polymorphism #1: a Pot, Bowl and Toy
// can all be used wherever Clay is expected. No cast is
// needed because an implicit conversion exists from a derived
// class to its base class.
var items = new List
(
new Pot(),
new Bowl(),
new Toy()
);
// Polymorphism at work #2: the virtual method Mould is
// invoked on each of the derived classes, not the base class.
foreach (var item in items)
(
item.Mould();
)
)
)

Salida:

Como habrás notado en el código, la clase de arcilla es la clase para padres cuyas clases para niños son clases de olla, juguete y tazón. El método 'Molde' se define en la clase primaria y en la clase secundaria con la misma firma de función. Por lo tanto, cuando se crea un objeto de la clase secundaria y llama al método Molde, el método de la clase secundaria anula el método de la clase base. Por lo tanto, vemos la salida del método de la clase secundaria. El código anterior muestra la anulación del método y no la sobrecarga para ilustrar el polimorfismo.

Puntos a tener en cuenta para el polimorfismo en c #

  1. La sobrecarga es diferente de la anulación. La sobrecarga tiene diferentes firmas de funciones, mientras que la anulación tiene las mismas firmas de funciones
  2. El polimorfismo se refiere a cambiar el comportamiento de una superclase en la subclase.
  3. La herencia se refiere al uso de la estructura y el comportamiento de una superclase en una subclase.

Los siguientes son algunos puntos clave:

  1. El polimorfismo es uno de los principales paradigmas de la programación orientada a objetos.
  2. La sobrecarga de funciones modifica la función según los tipos de retorno y los parámetros de la función en la clase heredada.
  3. La sobrecarga del operador modifica la definición del operador según los parámetros dados.
  4. El polimorfismo se usa para implementarlo, decide en tiempo de ejecución llamar al método de la clase secundaria utilizando la anulación del método

Artículos recomendados

Esta es una guía para el polimorfismo en C #. Aquí discutimos las dos formas de polimorfismo en C #, es decir, sobrecarga del operador y sobrecarga de funciones con código de muestra. También puede consultar el siguiente artículo para obtener más información:

  1. ¿Qué es StringBuilder en C #?
  2. Copiar constructor en C #
  3. ¿Qué es Multithreading en C #?
  4. ¿Qué es el patrón de diseño en C #?
  5. Tipos de constructor en C # con implementación de código
  6. Guía completa de subprocesos múltiples en C #