Vad är abstrakt klass i C #?

Ordet abstrakt betyder en tanke eller en idé som inte har någon fysisk form men som fungerar som en bas för andra saker. Detsamma är konceptet bakom abstrakt klass. I den här artikeln skulle vi diskutera abstrakt klasser i C #. En abstrakt klass är en speciell klass i C # som inte kan instanseras, dvs du kan inte skapa objekt i en abstrakt klass. Syftet med en abstrakt klass är att tillhandahålla en skelettstruktur för andra klasser att härleda från. Abstrakta klasser har ingen egen implementering. De kräver att utvecklarna och programmerarna härstammar från den abstrakta klassen och bygger på skelettstrukturen, dvs skriver deras implementering. En abstrakt klass kan också ha abstrakta metoddeklarationer inuti. Återigen kan dessa metoder inte ha några definitioner.

Syntaxen för att deklarera abstrakta klasser och metoder innefattar att placera nyckelordet abstrakt före deklarationen. Så enkelt som det.

Syntax:

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

Kom ihåg att abstrakta metoder inte kan ha definitioner. Således slutar de abstrakta metoddeklarationerna med en semikolon. De kan bara förklaras. Definitionerna måste tillhandahållas i härledda icke-abstrakta klasser.

Hur fungerar abstrakt klass i C #?

Det abstrakta nyckelordet instruerar kompilatorn att klassen är en basklassskelettstruktur som ska implementeras i härledda klasser. Om kompilatorn hittar någon klass som härleder den abstrakta basklassen, kontrollerar den om alla abstrakta metoder och egenskaper är åsidosatta och implementerade i den härledda klassen.

Abstrakt klass vs gränssnitt

Nu kanske du undrar vad som är allt detta och vad gränssnittet gör. Så, hur skiljer sig en abstrakt klass från ett gränssnitt?

Låt oss förstå detta med ett exempel. Låt oss säga att vi driver ett förlag och har anställt några redaktörer för att skriva kolumner för vårt tidskrift. Låt oss anta att de är experter i olika genrer, skriver artiklar som ska publiceras på en specifik veckodag och är alla anställda till samma lön.

Låt oss definiera den abstrakta anställdsklassen för våra redaktörer.

Koda:

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

Vi kan enkelt implementera betalningsmetoden medvetet om att det skulle vara samma för alla. De andra två metoderna förklarades abstrakta för att implementeras av den härledda klassen. Man kan förklara en normal klass för varje redaktör som härrör från den abstrakta klassen och kan sedan implementera de abstrakta metoderna för att definiera genrer och dagar. Antag nu att lönen för varje redaktör också är annorlunda. Ett sätt att ändra vår kod är att förklara betalningsmetoden som abstrakt. Det andra sättet skulle vara att förklara hela EmployeeEditor som ett gränssnitt och ge full frihet att ärva klasser.

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

Således är en abstrakt klass en basklass för andra klasser att bygga vidare på. Medan ett gränssnitt är en plan för andra klasser att hänvisa till och bygga från grunden.

Regler för abstrakt klass i C #

Det finns vissa regler att följa när man arbetar med abstrakta klasser.

  • Eftersom abstrakta klasser har ofullständiga metoddefinitioner kan de därför inte instansieras. Varje försök att skapa ett objekt i en abstrakt klass skulle resultera i ett kompileringstidsfel.
  • Abstrakta metoder kan inte definieras i abstrakta klasser utan endast deklareras. Metodkroppen måste definieras i härledda klasser.
  • Deriverade klasser måste implementera alla abstrakta metoder.
  • Abstrakta metoder kan inte vara statiska eller virtuella.

Exempel på abstrakt klass i C #

Problemdeklaration: Låt oss ta ett annat exempel i verkligheten. Antag att du blir ombedd att automatisera processen för generering av erbjudande för en viss organisation. Den nuvarande processen är helt manuell och kräver redigering av befintliga erbjudandebrev, som är benägna att fel. Det finns vissa saker som skulle vara vanliga för alla erbjudandebrev, t.ex. arbetsplats, arbetstider, företags titel, företagsvarumärke osv. Andra saker som anställdas namn, befattning, lön, anslutningsdatum etc. är specifika för varje erbjudande brev.

Lösning : Du skulle utforma en abstrakt klass för ovanstående syfte. Låt oss se hur.

Koda:

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

Produktion:

Slutsats

I ett nötskal är en abstrakt klass helt enkelt en ofullständig eller delvis komplett klass som andra klasser kan härleda och bygga sin logik ovanpå den. I den här artikeln har vi sett hur en abstrakt klass förklaras och fungerar. Vi såg verkliga exempel på användning av abstrakta klasser och hur de skiljer sig från gränssnitt. Vi rekommenderar att du använder abstrakta klasser så mycket som möjligt i din kod. Detta är en avgörande praxis för god programmering.

Rekommenderade artiklar

Detta är en guide till Abstract Class i C #. Här diskuterar vi definitionen och hur abstrakt klass fungerar i C # tillsammans med regler och ett exempel. Du kan också gå igenom våra andra relaterade artiklar för att lära dig mer -

  1. Vad är abstrakt klasser i JavaScript?
  2. Abstrakt klass i C ++? (Exempel)
  3. Vad är abstrakt klass i PHP?
  4. Översikt av Abstract Class i Python

Kategori: