Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

C# - Polimorfismo

La palabra polimorfismo significa tener muchas formas. En el paradigma de la programación orientada a objetos, el polimorfismo suele expresarse como "una interfaz, varias funciones".

El polimorfismo puede ser estático o dinámico. En polimorfismo estático , la respuesta a una función se determina en el momento de la compilación. En polimorfismo dinámico , se decide en tiempo de ejecución.

Polimorfismo estático

El mecanismo de vincular una función con un objeto durante el tiempo de compilación se denomina vinculación anticipada. También se llama enlace estático. C# proporciona dos técnicas para implementar el polimorfismo estático. Ellos son −

Hablaremos de la sobrecarga de operadores en el próximo capítulo.

Sobrecarga de funciones

Puede tener varias definiciones para el mismo nombre de función en el mismo ámbito. La definición de la función debe diferir entre sí por los tipos y/o el número de argumentos en la lista de argumentos. No puede sobrecargar las declaraciones de funciones que difieren solo por el tipo de retorno.

El siguiente ejemplo muestra el uso de la función print() para imprimir diferentes tipos de datos −

Demostración en vivo
using System;

namespace PolymorphismApplication {
   class Printdata {
      void print(int i) {
         Console.WriteLine("Printing int: {0}", i );
      }
      void print(double f) {
         Console.WriteLine("Printing float: {0}" , f);
      }
      void print(string s) {
         Console.WriteLine("Printing string: {0}", s);
      }
      static void Main(string[] args) {
         Printdata p = new Printdata();
         
         // Call print to print integer
         p.print(5);
         
         // Call print to print float
         p.print(500.263);
         
         // Call print to print string
         p.print("Hello C++");
         Console.ReadKey();
      }
   }
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −

Printing int: 5
Printing float: 500.263
Printing string: Hello C++

Polimorfismo dinámico

C# le permite crear clases abstractas que se utilizan para proporcionar una implementación de clase parcial de una interfaz. La implementación se completa cuando una clase derivada hereda de ella. Resumen Las clases contienen métodos abstractos, que son implementados por la clase derivada. Las clases derivadas tienen una funcionalidad más especializada.

Estas son las reglas sobre las clases abstractas −

El siguiente programa demuestra una clase abstracta −

Demostración en vivo
using System;

namespace PolymorphismApplication {
   abstract class Shape {
      public abstract int area();
   }
   
   class Rectangle:  Shape {
      private int length;
      private int width;
      
      public Rectangle( int a = 0, int b = 0) {
         length = a;
         width = b;
      }
      public override int area () { 
         Console.WriteLine("Rectangle class area :");
         return (width * length); 
      }
   }
   class RectangleTester {
      static void Main(string[] args) {
         Rectangle r = new Rectangle(10, 7);
         double a = r.area();
         Console.WriteLine("Area: {0}",a);
         Console.ReadKey();
      }
   }
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −

Rectangle class area :
Area: 70

Cuando tiene una función definida en una clase que desea implementar en una(s) clase(s) heredada(s), usa virtual funciones Las funciones virtuales podrían implementarse de manera diferente en diferentes clases heredadas y la llamada a estas funciones se decidirá en tiempo de ejecución.

El polimorfismo dinámico se implementa mediante clases abstractas y funciones virtuales .

El siguiente programa demuestra esto −

Demostración en vivo
using System;

namespace PolymorphismApplication {
   class Shape {
      protected int width, height;
      
      public Shape( int a = 0, int b = 0) {
         width = a;
         height = b;
      }
      public virtual int area() {
         Console.WriteLine("Parent class area :");
         return 0;
      }
   }
   class Rectangle: Shape {
      public Rectangle( int a = 0, int b = 0): base(a, b) {

      }
      public override int area () {
         Console.WriteLine("Rectangle class area :");
         return (width * height); 
      }
   }
   class Triangle: Shape {
      public Triangle(int a = 0, int b = 0): base(a, b) {
      }
      public override int area() {
         Console.WriteLine("Triangle class area :");
         return (width * height / 2); 
      }
   }
   class Caller {
      public void CallArea(Shape sh) {
         int a;
         a = sh.area();
         Console.WriteLine("Area: {0}", a);
      }
   }  
   class Tester {
      static void Main(string[] args) {
         Caller c = new Caller();
         Rectangle r = new Rectangle(10, 7);
         Triangle t = new Triangle(10, 5);
         
         c.CallArea(r);
         c.CallArea(t);
         Console.ReadKey();
      }
   }
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −

Rectangle class area:
Area: 70
Triangle class area:
Area: 25

Lenguaje C

  1. Clase y objeto de C#
  2. Modificadores de acceso de C#
  3. Palabra clave estática de C#
  4. Clase y método abstractos de C#
  5. Clase anidada de C#
  6. C# Clase parcial y método parcial
  7. Plantillas de clase de C++
  8. Clase anónima de Java
  9. Clase Java ObjectOutputStream
  10. Genéricos de Java
  11. Clase de archivo Java