Co to jest klasa abstrakcyjna w C #?

Słowo abstrakcyjne oznacza myśl lub ideę, która nie ma żadnej fizycznej formy, ale działa jako podstawa dla innych rzeczy. To samo dotyczy koncepcji klasy abstrakcyjnej. W tym artykule omówilibyśmy klasy abstrakcyjne w języku C #. Klasa abstrakcyjna to specjalna klasa w języku C #, której nie można utworzyć, tzn. Nie można tworzyć obiektów klasy abstrakcyjnej. Celem klasy abstrakcyjnej jest zapewnienie szkieletowej struktury dla innych klas, z których mogą pochodzić. Klasy abstrakcyjne nie mają własnej implementacji. Wymagają od programistów i programistów czerpania z klasy abstrakcyjnej i budowania na strukturze szkieletowej, tj. Pisania ich implementacji. Klasa abstrakcyjna może także zawierać deklaracje metod abstrakcyjnych. Ponownie metody te nie mogą mieć żadnych definicji.

Składnia deklarowania klas i metod abstrakcyjnych wymaga umieszczenia słowa kluczowego streszczenie przed deklaracją. Tak proste jak to.

Składnia:

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

Pamiętaj, że metody abstrakcyjne nie mogą mieć definicji. Zatem deklaracje metod abstrakcyjnych kończą się średnikiem. Można je tylko zadeklarować. Definicje należy podać w pochodnych nieabstrakcyjnych klasach.

Jak działa klasa abstrakcyjna w C #?

Streszczenie słowo kluczowe instruuje kompilator, że klasa jest szkieletową strukturą klasy podstawowej, która ma zostać zaimplementowana w klasach pochodnych. Jeśli kompilator znajdzie jakąkolwiek klasę wyprowadzającą abstrakcyjną klasę podstawową, sprawdza, czy wszystkie abstrakcyjne metody i właściwości są przesłonięte i zaimplementowane w klasie pochodnej.

Klasa abstrakcyjna a interfejs

Być może zastanawiasz się, co to wszystko jest i co robi interfejs. Czym zatem różni się klasa abstrakcyjna od interfejsu?

Pozwól nam to zrozumieć na przykładzie. Powiedzmy, że prowadzimy firmę wydawniczą i zatrudniliśmy kilku redaktorów, którzy napisali kolumny do naszego magazynu. Załóżmy, że są ekspertami w różnych gatunkach, piszą artykuły, które zostaną opublikowane w określonym dniu tygodnia, i wszyscy są zatrudniani za tę samą pensję.

Zdefiniujmy abstrakcyjną klasę pracownika dla naszych redaktorów.

Kod:

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

Możemy łatwo wdrożyć metodę płatności, wiedząc, że dla wszystkich będzie taka sama. Pozostałe dwie metody zostały zadeklarowane jako abstrakcyjne do zaimplementowania przez klasę pochodną. Można zadeklarować normalną klasę dla każdego edytora wywodzącą się z klasy abstrakcyjnej, a następnie zaimplementować metody abstrakcyjne w celu zdefiniowania gatunków i dni. Załóżmy teraz, że wynagrodzenie każdego redaktora jest również inne. Jednym ze sposobów zmiany naszego kodu jest zadeklarowanie metody płatności jako abstrakcyjnej. Innym sposobem byłoby zadeklarowanie całego EmployeeEditor jako interfejsu i zapewnienie pełnej swobody dziedziczenia klas.

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

Zatem klasa abstrakcyjna jest klasą bazową, na której inne klasy mogą budować. Natomiast interfejs jest planem dla innych klas, do których można się odwoływać i budować od zera.

Zasady klasy abstrakcyjnej w C #

Podczas pracy z klasami abstrakcyjnymi należy przestrzegać pewnych zasad.

  • Ponieważ klasy abstrakcyjne mają niekompletne definicje metod, dlatego nie można ich tworzyć. Każda próba utworzenia obiektu klasy abstrakcyjnej spowodowałaby błąd kompilacji.
  • Metod abstrakcyjnych nie można definiować w klasach abstrakcyjnych, a jedynie deklarować. Treść metody musi być zdefiniowana w klasach pochodnych.
  • Klasy pochodne muszą implementować wszystkie metody abstrakcyjne.
  • Metody abstrakcyjne nie mogą być statyczne ani wirtualne.

Przykład klasy abstrakcyjnej w C #

Opis problemu: weźmy kolejny przykład w świecie rzeczywistym. Załóżmy, że jesteś proszony o zautomatyzowanie procesu generowania listów ofertowych dla określonej organizacji. Obecny proces jest całkowicie ręczny i wymaga edycji istniejących listów ofert, które są podatne na błędy. Są pewne rzeczy, które byłyby wspólne dla wszystkich listów ofert, takie jak miejsce pracy, godziny pracy, tytuł firmy, marka firmy itp. Inne rzeczy, takie jak nazwisko pracownika, stanowisko, wynagrodzenie, data dołączenia itp. Są specyficzne dla każdej oferty list.

Rozwiązanie : Zaprojektowałbyś klasę abstrakcyjną dla powyższego celu. Zobaczmy jak.

Kod:

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

Wynik:

Wniosek

W skrócie, klasa abstrakcyjna jest po prostu niekompletną lub częściowo kompletną klasą, którą inne klasy mogą wyprowadzić i zbudować na niej swoją logikę. W tym artykule widzieliśmy, jak deklarowana jest klasa abstrakcyjna i ona działa. Widzieliśmy rzeczywiste przykłady użycia klas abstrakcyjnych i tego, jak różnią się one od interfejsów. Zaleca się, aby w kodzie używać jak najwięcej klas abstrakcyjnych. Jest to kluczowa praktyka dobrego programowania.

Polecane artykuły

To jest przewodnik po klasie abstrakcyjnej w C #. Tutaj omawiamy definicję i sposób działania klasy abstrakcyjnej w języku C # wraz z regułami i przykładem. Możesz również przejrzeć nasze inne powiązane artykuły, aby dowiedzieć się więcej -

  1. Co to są klasy abstrakcyjne w JavaScript?
  2. Klasa abstrakcyjna w C ++? (Przykłady)
  3. Co to jest klasa abstrakcyjna w PHP?
  4. Przegląd klasy abstrakcyjnej w Pythonie