¿Qué es la clase abstracta en C #?

La palabra resumen significa un pensamiento o una idea que no tiene ninguna forma física propia sino que actúa como base para otras cosas. Lo mismo es el concepto detrás de la clase abstracta. En este artículo, discutiremos las clases abstractas en C #. Una clase abstracta es una clase especial en C # que no se puede instanciar, es decir, no se pueden crear objetos de una clase abstracta. El propósito de una clase abstracta es proporcionar una estructura esquelética para que otras clases deriven. Las clases abstractas no tienen implementación propia. Requieren que los desarrolladores y programadores deriven de la clase abstracta y construyan sobre la estructura esquelética, es decir, escriban su implementación. Una clase abstracta también puede tener declaraciones de métodos abstractos en su interior. Nuevamente, estos métodos no pueden tener ninguna definición.

La sintaxis de declarar clases y métodos abstractos implica colocar el resumen de palabras clave antes de la declaración. Tan sencillo como eso.

Sintaxis:

abstract class ClassName
(
public abstract void MethodName();
)

Recuerde, los métodos abstractos no pueden tener definiciones. Por lo tanto, las declaraciones de método abstracto terminan con un punto y coma. Solo pueden ser declarados. Las definiciones deben proporcionarse en clases derivadas no abstractas.

¿Cómo funciona la clase abstracta en C #?

La palabra clave abstract le indica al compilador que la clase es una estructura esquelética de clase base para implementarse en clases derivadas. Si el compilador encuentra alguna clase derivada de la clase base abstracta, verifica si todos los métodos y propiedades abstractos se anulan e implementan en la clase derivada.

Clase abstracta vs interfaz

Ahora, puede que se pregunte qué es todo esto y qué interfaz hace. Entonces, ¿en qué se diferencia una clase abstracta de una interfaz?

Comprendamos esto con un ejemplo. Digamos que tenemos una editorial y hemos contratado algunos editores para escribir columnas para nuestra revista. Supongamos que son expertos en diferentes géneros, escriben artículos para ser publicados en un día específico de la semana, y todos son contratados con el mismo salario.

Definamos la clase abstracta de Empleado para nuestros editores.

Código:

abstract class EmployeeEditors
(
public abstract void Genre();
public abstract string PublishDay();
public int Payment()
(
Console.Write(“Monthly salary is (0)$.”, 1000);
)
)

Podríamos implementar fácilmente el método de pago sabiendo que sería lo mismo para todos. Los otros dos métodos fueron declarados abstractos para ser implementados por la clase derivada. Se podría declarar una clase normal para cada editor derivada de la clase abstracta y luego implementar los métodos abstractos para definir los géneros y los días. Ahora, suponga que el salario de cada editor también es diferente. Una forma de cambiar nuestro código es declarar el método de pago como abstracto. La otra forma sería declarar todo el EmployeeEditor como una interfaz y dar total libertad a las clases heredadas.

Public interface EmployeeEditors
(
public abstract void Genre();
public abstract string PublishDay();
public abstract int Payment();
)

Por lo tanto, una clase abstracta es una clase base sobre la cual se pueden construir otras clases. Mientras que una interfaz es un plan para que otras clases se refieran y construyan desde cero.

Reglas de clase abstracta en C #

Hay ciertas reglas a seguir cuando se trabaja con clases abstractas.

  • Como las clases abstractas tienen definiciones de método incompletas, por lo tanto, no se pueden instanciar. Cualquier intento de crear un objeto de una clase abstracta daría como resultado un error en tiempo de compilación.
  • Los métodos abstractos no se pueden definir en clases abstractas, sino que solo se declaran. El cuerpo del método debe definirse en clases derivadas.
  • Las clases derivadas deben implementar todos los métodos abstractos.
  • Los métodos abstractos no pueden ser estáticos o virtuales.

Ejemplo de clase abstracta en C #

Declaración del problema: tomemos otro ejemplo del mundo real. Suponga que se le pide que automatice el proceso de generación de cartas de oferta para una determinada organización. El proceso actual es completamente manual y requiere la edición de cartas de oferta existentes, lo que es propenso a errores. Hay ciertas cosas que serían comunes para todas las cartas de oferta, como la ubicación del trabajo, los horarios de trabajo, el título de la empresa, la marca de la empresa, etc. Otras cosas, como el nombre del empleado, el puesto, el salario, la fecha de incorporación, etc., son específicas de cada oferta. letra.

Solución : Diseñaría una clase abstracta para el propósito anterior. Veamos cómo.

Código:

ode: using System;
abstract class OfferLetter
(
public abstract string Name(string name);
public abstract string Designation(string designation);
public abstract int Payment(int pay);
public abstract string DOJ(string doj);
public string CompanyName()
(
return "XYZ Corporation Pvt. Ltd.";
)
public string OfficeAddress()
(
return "512, Manhattan, NY";
)
public string CompanyBranding()
(
return this.CompanyName() + " is a privately owned regsitered corporation operating \n under the license provided by the state of New York.";
)
public string Disclaimer()
(
return "This letter and its contents are confidential in nature and are intended only \n for the recipient."+
"\nIf you are not the correct recipient, kindly return it immediately \n to " + this.CompanyName() + " " + this.OfficeAddress() + ".";
)
)
class PrintOfferLetter : OfferLetter
(
public override string Name(string name)
(
return name;
)
public override string Designation(string designation)
(
return designation;
)
public override int Payment(int pay)
(
return pay;
)
public override string DOJ(string doj)
(
return doj;
)
)
public class Program
(
public static void Main()
(
PrintOfferLetter ltr = new PrintOfferLetter();
string empName = "Mr. ABC", designation = "Senior Consultant", doj = "20-02-2020";
int pay = 50000;
Console.WriteLine(ltr.CompanyName() + " is very happy to extend this offer letter to \n" + ltr.Name(empName)
+ " at the designation of " + ltr.Designation(designation) + " with an annual pay of " + ltr.Payment(pay) + "$.");
Console.WriteLine("\nYou are required to report at " + ltr.OfficeAddress() + " from " + ltr.DOJ(doj) + " (dd-mm-yyyy).");
Console.WriteLine("\n\n" + ltr.CompanyBranding());
Console.WriteLine("\n\n" + ltr.Disclaimer());
)
)

Salida:

Conclusión

En pocas palabras, una clase abstracta es simplemente una clase incompleta o parcialmente completa que otras clases pueden derivar y construir su lógica sobre ella. En este artículo, hemos visto cómo se declara una clase abstracta y cómo funciona. Vimos ejemplos de la vida real del uso de clases abstractas y cómo son diferentes de las interfaces. Se recomienda probar y usar clases abstractas tanto como sea posible en su código. Esta es una práctica crucial de una buena programación.

Artículos recomendados

Esta es una guía para la clase abstracta en C #. Aquí discutimos la definición y cómo funciona la clase abstracta en C # junto con reglas y un ejemplo. También puede consultar nuestros otros artículos relacionados para obtener más información:

  1. ¿Qué son las clases abstractas en JavaScript?
  2. ¿Clase abstracta en C ++? (Ejemplos)
  3. ¿Qué es la clase abstracta en PHP?
  4. Descripción general de la clase abstracta en Python