Herencia y polimorfismo de C# con ejemplos de programas

โšก Resumen inteligente

La herencia y el polimorfismo en C# son dos principios fundamentales de la programaciรณn orientada a objetos. La herencia permite que una clase hija reutilice los campos y mรฉtodos de una clase padre, mientras que el polimorfismo permite que un mismo nombre de mรฉtodo adopte mรบltiples formas.

  • ๐Ÿงฌ Herencia: Una clase hija hereda los campos y mรฉtodos de su clase padre y puede aรฑadir los suyos propios.
  • ๐Ÿ”’ Miembros protegidos: Marcar los campos de la clase padre como protegidos permite que una clase hija derivada los reutilice directamente.
  • ๐Ÿงฉ Polimorfismo: Un mismo nombre de mรฉtodo puede adoptar muchas formas, por lo que una sola llamada se comporta de manera diferente segรบn el contexto.
  • ๐Ÿ”€ Sobrecarga de mรฉtodos: Varios mรฉtodos comparten un mismo nombre, pero difieren en los parรกmetros, que se resuelven en tiempo de compilaciรณn.
  • ๐Ÿงฑ Code reutilizar: Ambos principios eliminan el cรณdigo duplicado y mantienen la coherencia entre las clases relacionadas.
  • ๐Ÿค– Asistencia de IA: GitHub Copilot genera las clases base y derivadas; ML.NET reutiliza las jerarquรญas de clases como entrada del modelo.

Herencia y polimorfismo en C#

ยฟQuรฉ es la herencia en C#?

Herencia es un concepto importante de C#. La herencia es un concepto en el que se definen clases principales y clases secundarias. Las clases hijas heredan mรฉtodos y propiedades de la clase padre, pero al mismo tiempo tambiรฉn pueden modificar el comportamiento de los mรฉtodos si es necesario. La clase secundaria tambiรฉn puede definir sus propios mรฉtodos si es necesario.

Comprendamos mejor la herencia de C# mediante un ejemplo de programa:

Ejemplo de herencia de C#

Veamos ahora cรณmo podemos incorporar el concepto de herencia en nuestro cรณdigo.

Paso 1) El primer paso es cambiar el cรณdigo de nuestra clase Tutorial. En este paso, agregamos el siguiente cรณdigo al archivo Tutorial.cs.

Ejemplo de herencia de C#

Tenga en cuenta que ahora debemos agregar el modificador de acceso "protegido" tanto al campo TutorialID como al campo TutorialName.

Recuerda que habรญamos mencionado este modificador de acceso en el Tutorial sobre modificadores de accesoAquรญ se puede apreciar el propรณsito de esto. Solo cuando se cuenta con este modificador de acceso (protegido), la clase hija podrรก utilizar los campos de la clase padre.

Paso 2) El segundo paso es agregar nuestra nueva clase infantil. El nombre de esta clase serรก โ€œGuru99Tutorialโ€. En este paso, agregamos el siguiente cรณdigo al archivo Tutorial.cs. El cรณdigo debe colocarse despuรฉs de la definiciรณn de la clase Tutorial.

Ejemplo de herencia de C#

Code Explicaciรณn:-

  1. El primer paso es crear el GuruClase hija 99Tutorial. Tambiรฉn debemos mencionar que esta clase serรก una clase hija de la clase Tutorial. Esto se indica mediante la palabra clave ':'.
  2. A continuaciรณn, estamos definiendo un mรฉtodo llamado RenameTutorial. Se utilizarรก para cambiar el nombre del campo TutorialName. Este mรฉtodo acepta una variable de cadena que contiene el nuevo nombre del Tutorial.
  3. Luego asignamos el parรกmetro pNewName al campo TutorialName. Nota: : โ€“ Aunque no hemos definido el campo TutorialName en el โ€œGuruEn la clase โ€œ99Tutorialโ€, aรบn podemos acceder a este campo. Esto se debe a que โ€œGuru"99Tutorial" es una subclase de la clase Tutorial. Y como hemos declarado los campos de la clase Tutorial como protegidos, esta clase puede acceder a ellos.

Paso 3) El รบltimo paso es modificar nuestro archivo principal Program.cs. En nuestra aplicaciรณn de consola, vamos a crear un objeto de la GuruClase 99Tutorial. Con este objeto, llamaremos al mรฉtodo RenameTutorial. Luego, mostraremos el campo TutorialName con la ayuda del mรฉtodo GetTutorial.

Ejemplo de herencia de C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 public class Tutorial
 {
  protected int TutorialID; 
  protected string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  
  public String GetTutorial()
  {
   return TutorialName;
  }
 }
  public class Guru99Tutorial:Tutorial
  {
   public void RenameTutorial(String pNewName)
   {
    TutorialName=pNewName;
   }
  
  static void Main(string[] args) 
  {
   Guru99Tutorial pTutor=new Guru99Tutorial();
   
   pTutor.RenameTutorial(".Net by Guru99");
    
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Explicaciรณn:-

  1. El primer paso es crear un objeto para el GuruClase Tutorial 99. Esto se hace mediante la palabra clave 'new'. Tenga en cuenta que esta vez no estamos creando un objeto de la clase Tutorial.
  2. Utilizamos el mรฉtodo RenameTutorial del GuruClase 99Tutorial para cambiar el campo TutorialName. Pasamos la cadena โ€œ.Net por Guru99โ€ al mรฉtodo RenameTutorial.
  3. Luego llamamos al mรฉtodo GetTutorial. Tenga en cuenta que, aunque este mรฉtodo no estรก definido en el GuruEn la clase 99Tutorial, aรบn podemos acceder a este mรฉtodo. El resultado del mรฉtodo GetTutorial se muestra en la consola mediante el mรฉtodo Console.WriteLine.

Si el cรณdigo anterior se ingresa correctamente y el programa se ejecuta con รฉxito, se mostrarรก el siguiente resultado.

Salida:

Ejemplo de herencia de C#

A partir de la salida, podemos ver claramente que el campo TutorialName fue renombrado a โ€œ.Net por Guru99โ€. Esto fue posible gracias al mรฉtodo RenameTutorial llamado por la clase hija.

ยฟQuรฉ es el polimorfismo en C#?

Polimorfismo in C# Es un concepto de la programaciรณn orientada a objetos (POO) donde un mismo nombre puede tener mรบltiples formas. Por ejemplo, tienes un telรฉfono inteligente para comunicarte. El modo de comunicaciรณn que elijas puede ser cualquiera: una llamada, un mensaje de texto, un mensaje con imรกgenes, correo electrรณnico, etc. El objetivo es comรบn, es decir, la comunicaciรณn, pero el mรฉtodo de comunicaciรณn es diferente. Esto se conoce como polimorfismo.

Obtendrรก una mejor comprensiรณn del polimorfismo de C# con el siguiente ejemplo de programa:

Ejemplo de polimorfismo de C#

Veamos ahora cรณmo podemos incorporar el concepto de polimorfismo en nuestro cรณdigo.

Paso 1) El primer paso es cambiar el cรณdigo de nuestra clase Tutorial. En este paso, agregamos el siguiente cรณdigo al archivo Tutorial.cs.

Ejemplo de polimorfismo de C#

Code Explicaciรณn:-

1 y 2) El primer paso es el mismo que en nuestros ejemplos anteriores. Estamos enping la definiciรณn del mรฉtodo SetTutorial tal como es.

3) Este mรฉtodo establece TutorialID y TutorialName en funciรณn de los parรกmetros pID y pName.

4) Aquรญ es donde hacemos un cambio en nuestra clase donde agregamos un nuevo mรฉtodo con el mismo nombre de SetTutorial. Solo que esta vez solo pasamos un parรกmetro que es pName. En este mรฉtodo, simplemente configuramos el campo de TutorialName en pName.

Paso 2) El รบltimo paso es modificar nuestro archivo principal Program.cs. En nuestra aplicaciรณn de consola, vamos a crear un objeto de la Guru99Clase tutorial.

Ejemplo de polimorfismo de C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Tutorial
 {
  public int TutorialID; 
  public string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  public void SetTutorial(string pName) 
  {
   TutorialName=pName;
  }
  public String GetTutorial()
  {
   return TutorialName;
  }
  
  static void Main(string[] args) 
  {
   Tutorial pTutor=new Tutorial();
   
   pTutor.SetTutorial(1,"First Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
   
   pTutor.SetTutorial("Second Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Explicaciรณn:-

  1. En el primer paso, utilizamos el mรฉtodo SetTutorial con 2 parรกmetros. Donde pasamos tanto TutorialID como TutorialName a este mรฉtodo.
  2. En el segundo paso, ahora llamamos al mรฉtodo SetTutorial con un solo parรกmetro. Simplemente estamos pasando el TutorialName a este mรฉtodo.

Si el cรณdigo anterior se ingresa correctamente y se ejecuta el programa, se mostrarรก el siguiente resultado. Si desea obtener tambiรฉn el ID del tutorial junto con el nombre del tutorial, debe seguir los pasos a continuaciรณn.

  1. Cree un mรฉtodo separado llamado public int GetTutorialID
  2. En ese mรฉtodo, escriba la lรญnea de cรณdigo "return TutorialID". Esto se puede utilizar para devolver el TutorialID al programa que realiza la llamada.

Salida:

Ejemplo de polimorfismo de C#

En el resultado, podemos ver claramente que ambos mรฉtodos se llamaron correctamente. Debido a esto, las cadenas "Primer tutorial" y "Segundo tutorial" se enviaron a la consola.

Preguntas Frecuentes

C# admite herencia simple, multinivel y jerรกrquica a travรฉs de clases. La herencia mรบltiple solo se produce a travรฉs de interfaces.

No. Una clase AC# hereda de una sola clase base. La herencia mรบltiple utiliza varias interfaces.

La sobrecarga utiliza un mismo nombre con diferentes parรกmetros en tiempo de compilaciรณn. La anulaciรณn redefine un mรฉtodo base virtual en tiempo de ejecuciรณn.

La palabra clave `virtual` permite sobrescribir un mรฉtodo base; la palabra clave `override` lo redefine en una clase derivada.

La palabra clave base permite que una clase derivada llame al constructor de la clase padre o acceda a miembros base ocultos o sobrescritos.

Marca la clase como sellada. Una clase sellada no puede ser una clase base, lo que impide la herencia posterior y mejora el rendimiento.

Sรญ. GitHub Copilot genera la estructura de las clases base y secundarias, y agrega mรฉtodos virtuales y de anulaciรณn a partir de un comentario o nombre de clase.

ML.NET define clases de datos y predicciรณn que heredan miembros compartidos, y su flujo de trabajo reutiliza un tipo base de transformador comรบn.

Resumir este post con: