O que é classe abstrata em c #?

A palavra abstrato significa um pensamento ou uma idéia que não possui nenhuma forma física própria, mas atua como base para outras coisas. O mesmo é o conceito por trás da classe abstrata. Neste artigo, discutiríamos Classes abstratas em C #. Uma classe abstrata é uma classe especial em C # que não pode ser instanciada, ou seja, você não pode criar objetos de uma classe abstrata. O objetivo de uma classe abstrata é fornecer uma estrutura esquelética para a qual outras classes derivam. As classes abstratas não têm implementação própria. Eles exigem que os desenvolvedores e programadores derivem da classe abstrata e desenvolvam a estrutura esquelética, ou seja, escrevam sua implementação. Uma classe abstrata também pode ter declarações de método abstrato dentro. Novamente, esses métodos não podem ter definições.

A sintaxe da declaração de classes e métodos abstratos envolve a colocação do resumo da palavra-chave antes da declaração. Tão simples como isso.

Sintaxe:

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

Lembre-se, métodos abstratos não podem ter definições. Assim, as declarações do método abstrato terminam com ponto e vírgula. Eles só podem ser declarados. As definições devem ser fornecidas em classes não abstratas derivadas.

Como a classe abstrata funciona em c #?

A palavra-chave abstract instrui o compilador que a classe é uma estrutura esquelética da classe base a ser implementada em classes derivadas. Se o compilador encontrar alguma classe derivada da classe base abstrata, ele verificará se todos os métodos e propriedades abstratos foram substituídos e implementados na classe derivada.

Classe abstrata vs interface

Agora, você pode estar se perguntando o que é tudo isso e o que a interface faz. Então, como uma classe abstrata é diferente de uma interface?

Vamos entender isso com um exemplo. Digamos que administremos uma editora e contratamos alguns editores para escrever colunas para a nossa revista. Vamos supor que eles sejam especialistas em gêneros diferentes, escrevam artigos a serem publicados em um dia específico da semana e sejam todos contratados com o mesmo salário.

Vamos definir a classe abstrata Employee para nossos editores.

Código:

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

Poderíamos implementar facilmente o método de pagamento, sabendo que seria o mesmo para todos. Os outros dois métodos foram declarados abstratos para serem implementados pela classe derivada. Pode-se declarar uma classe normal para cada editor derivado da classe abstrata e, em seguida, implementar os métodos abstratos para definir os gêneros e os dias. Agora, suponha que o salário de cada editor também seja diferente. Uma maneira de alterar nosso código é declarar o método de pagamento como abstrato. A outra maneira seria declarar todo o EmployeeEditor como uma interface e dar total liberdade para herdar classes.

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

Assim, uma classe abstrata é uma classe base para outras classes serem construídas. Visto que uma interface é um modelo para outras classes se referirem e construirem do zero.

Regras da classe abstrata em C #

Existem certas regras a serem seguidas ao trabalhar com classes abstratas.

  • Como as classes abstratas têm definições de métodos incompletas, elas não podem ser instanciadas. Qualquer tentativa de criar um objeto de uma classe abstrata resultaria em um erro em tempo de compilação.
  • Métodos abstratos não podem ser definidos em classes abstratas, mas apenas declarados. O corpo do método deve ser definido em classes derivadas.
  • As classes derivadas devem implementar todos os métodos abstratos.
  • Os métodos abstratos não podem ser estáticos ou virtuais.

Exemplo de classe abstrata em c #

Declaração do problema: Vamos dar outro exemplo do mundo real. Suponha que você seja solicitado a automatizar o processo de geração de carta de oferta para uma determinada organização. O processo atual é totalmente manual e requer a edição de cartas de ofertas existentes, que são propensas a erros. Existem certas coisas que seriam comuns a todas as cartas de ofertas, como local de trabalho, horários de trabalho, nome da empresa, marca da empresa, etc. Outras coisas, como nome do funcionário, cargo, salário, data de adesão, etc., são específicas para cada oferta carta.

Solução : Você projetaria uma classe abstrata para o objetivo acima. Vamos ver como.

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());
)
)

Resultado:

Conclusão

Em poucas palavras, uma classe abstrata é simplesmente uma classe incompleta ou parcialmente completa que outras classes podem derivar e construir sua lógica sobre ela. Neste artigo, vimos como uma classe abstrata é declarada e está funcionando. Vimos exemplos da vida real do uso de classes abstratas e de como elas são diferentes das interfaces. É recomendável tentar usar classes abstratas o máximo possível no seu código. Essa é uma prática crucial de boa programação.

Artigos recomendados

Este é um guia para a classe abstrata em C #. Aqui discutimos a definição e como a classe abstrata funciona em C # junto com as regras e um exemplo. Você também pode consultar nossos outros artigos relacionados para saber mais -

  1. O que são classes abstratas em JavaScript?
  2. Classe abstrata em C ++? (Exemplos)
  3. O que é classe abstrata em PHP?
  4. Visão geral da classe abstrata em Python