Mi az absztrakt osztály a C # -ben?
Az absztrakt szó azt a gondolatot vagy ötletet jelenti, amelynek nincs fizikai formája, hanem más dolgok alapjául szolgál. Ugyanez a koncepció áll az absztrakt osztály mögött. Ebben a cikkben a C # absztrakt osztályait tárgyaljuk. Az absztrakt osztály egy olyan speciális osztály a C # -ben, amely nem realizálható, azaz nem hozhat létre absztrakt osztály objektumait. Az absztrakt osztály célja vázszerkezet létrehozása más osztályok számára, amelyekből származhat. Az absztrakt osztályoknak nincs saját megvalósításuk. Megkívánják a fejlesztőktől és a programozóktól, hogy az absztrakt osztályból származjanak, és a vázszerkezetre építsenek, azaz írják le megvalósításukat. Az absztrakt osztályok absztrakt módszernyilatkozatokkal is rendelkezhetnek. Ezeknek a módszereknek ismét nincs meghatározása.
Az absztrakt osztályok és módszerek deklarálásának szintaxisa magában foglalja az absztrakt kulcsszó elhelyezését a deklaráció elõtt. Ilyen egyszerű az egész.
Szintaxis:
abstract class ClassName
(
public abstract void MethodName();
)
Ne feledje, hogy az elvont módszereknek nincs meghatározása. Így az absztrakt módszer deklarációk pontosvesszővel ér véget. Csak bejelenthetők. A meghatározásokat származtatott, nem elvont osztályokban kell megadni.
Hogyan működik az absztrakt osztály a C # -ben?
Az absztrakt kulcsszó utasítja a fordítót, hogy az osztály egy alap osztály vázszerkezete, amelyet a származtatott osztályokban kell megvalósítani. Ha a fordító olyan osztályt talál, amely az absztrakt alaposztályból származik, akkor ellenőrzi, hogy az összes absztrakt módszer és tulajdonság felülbírálódik-e és a származtatott osztályba kerül-e.
Absztrakt osztály vs felület
Most már azon tűnődhet, vajon mi ez és mi az interfész. Tehát hogyan különbözik egy absztrakt osztály az interfésztől?
Megértjük ezt egy példával. Tegyük fel, hogy kiadóvállalatot működtetünk és néhány szerkesztőt béreltünk, hogy oszlopokat írjon a magazinunk számára. Tegyük fel, hogy különféle műfajok szakemberei, cikkeket írnak, amelyeket a hét egy adott napján kell közzétenni, és akiket azonos fizetéssel fizetnek.
Definiáljuk az absztrakt munkavállalói osztályt szerkesztõink számára.
Kód:
abstract class EmployeeEditors
(
public abstract void Genre();
public abstract string PublishDay();
public int Payment()
(
Console.Write(“Monthly salary is (0)$.”, 1000);
)
)
Könnyen bevezethetjük a fizetési módot, tudva, hogy ez mindenki számára azonos lesz. A másik két módszert elvontnak nyilvánították a származtatott osztály általi megvalósításhoz. Be lehetne adni egy normál osztályt minden szerkesztő számára, amely az absztrakt osztályból származik, majd elvégezheti az absztrakt módszereket a műfajok és a napok meghatározására. Tegyük fel, hogy az egyes szerkesztők fizetése is eltérő. Kódunk megváltoztatásának egyik módja a fizetési mód elvontnak nyilvánítása. A másik módszer az egész EmployeeEditor felületté nyilvánítása, és teljes szabadság megadása az osztályok örökölésére.
Public interface EmployeeEditors
(
public abstract void Genre();
public abstract string PublishDay();
public abstract int Payment();
)
Tehát egy absztrakt osztály alaposztály más osztályok számára, amelyekre építni lehet. Mivel az interfész más területekre vonatkozik, amelyek hivatkozhatnak és építhetnek a semmiből.
C elvont osztály szabályai
Vannak bizonyos szabályok, amelyeket be kell tartani az elvont osztályokkal való munka során.
- Mivel az absztrakt osztályoknak hiányos módszerdefiníciói vannak, ezért azokat nem lehet azonnal megvalósítani. Bármely absztrakt osztály objektumának létrehozására tett kísérlet fordítási idő hibát eredményez.
- Az absztrakt módszerek nem definiálhatók absztrakt osztályokban, csak deklarálhatók. A módszer testét származtatott osztályokban kell meghatározni.
- A származtatott osztályoknak végrehajtaniuk kell az összes elvont módszert.
- Az absztrakt módszerek nem lehetnek statikusak vagy virtuálisak.
Példa a C absztrakt osztályra
Problémamegjegyzés: Vegyünk egy másik valós példát. Tegyük fel, hogy felkérjük Önt arra, hogy automatizálja az ajánlatkérés betűkészítésének folyamatát egy adott szervezetnél. A jelenlegi folyamat teljesen kézi és meglévő ajánlatlevelek szerkesztését igényli, ami hajlamos a hibára. Vannak bizonyos dolgok, amelyek általánosak lesznek az összes ajánlati levél esetében, mint például a munka helye, a munkaidő, a cég címe, a cég márkaneve stb. Az egyéb ajánlatokra jellemzőek más dolgok, például a munkavállaló neve, beosztása, fizetése, csatlakozási dátuma stb. levél.
Megoldás : A fenti célra elvont osztályt tervezhet. Nézzük meg, hogyan.
Kód:
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());
)
)
Kimenet:
Következtetés
Dióhéjban az absztrakt osztály egyszerűen hiányos vagy részben teljes osztály, amelyet más osztályok levezethetnek, és logikájukra építhetik. Ebben a cikkben láttuk, hogy egy absztrakt osztály deklarálódik és működik. Láttuk a valós élet példáit az absztrakt osztályok használatáról és arról, hogy mi különböznek az interfészektől. Javasoljuk, hogy az absztrakt osztályokat próbálja meg a lehető legnagyobb mértékben használni a kódjában. Ez a helyes programozás kritikus gyakorlata.
Ajánlott cikkek
Ez egy útmutató a C # absztrakt osztályához. Itt tárgyaljuk a meghatározást és az absztrakt osztály működését a C # -ben, valamint a szabályokat és egy példát. Megnézheti más kapcsolódó cikkeket is, ha többet szeretne megtudni -
- Mik az absztrakt osztályok a JavaScript-ben?
- C ++ absztrakt osztály? (Példák)
- Mi az absztrakt osztály a PHP-ben?
- A Python absztrakt osztályának áttekintése