Programiranje

Kdaj uporabiti abstraktni razred v primerjavi z vmesnikom v jeziku C #

Pri oblikovanju aplikacij je pomembno vedeti, kdaj uporabiti abstraktni razred in kdaj uporabiti vmesnik. Čeprav se abstraktni razredi in vmesniki na nek način zdijo podobni, obstajajo ključne razlike, ki bodo določile, katera je najboljša izbira za to, kar želite doseči. V tem blogu bom razpravljal o teh razlikah in o tem, kako se odločiti, kdaj uporabiti katero.

Kratek odgovor: abstraktni razred vam omogoča, da ustvarite funkcionalnost, ki jo lahko podrazredi izvajajo ali preglasijo. Vmesnik vam omogoča samo definiranje funkcionalnosti, ne pa njeno izvajanje. In medtem ko lahko razred razširi samo en abstraktni razred, lahko izkoristi več vmesnikov.

Razložen abstraktni razred C #

Abstraktni razred je posebna vrsta razreda, ki ga ni mogoče ustvariti. Abstraktni razred je zasnovan tako, da ga podedujejo podrazredi, ki implementirajo ali preglasijo njegove metode. Z drugimi besedami, abstraktni razredi se bodisi delno izvajajo bodisi se sploh ne izvajajo. Funkcije lahko imate v svojem abstraktnem razredu - metode v abstraktnem razredu so lahko abstraktne in konkretne. Abstraktni razred ima lahko konstruktorje - to je ena glavnih razlik med abstraktnim razredom in vmesnikom. Abstraktne razrede lahko izkoristite za načrtovanje komponent in določite neko raven skupne funkcionalnosti, ki jo morajo izvajati izvedeni razredi.

Razložen vmesnik C #

Vmesnik je v bistvu pogodba - nima nobene izvedbe. Vmesnik lahko vsebuje samo izjave o metodah; ne more vsebovati definicij metod. V vmesniku ne morete imeti nobenih podatkov o članih. Medtem ko lahko abstraktni razred vsebuje definicije metod, polja in konstruktorje, lahko vmesnik vsebuje samo izjave o dogodkih, metodah in lastnostih. Metode, deklarirane v vmesniku, morajo izvajati razredi, ki izvajajo vmesnik. Upoštevajte, da lahko razred izvaja več kot en vmesnik, vendar razširi samo en razred. Razred, ki izvaja vmesnik, mora izvajati vse svoje člane. Tako kot abstraktnega razreda tudi vmesnika ni mogoče ustvariti.

Ali naj uporabim abstraktni razred ali vmesnik?

Abstraktni razredi vam omogočajo prilagodljivost nekaterih konkretnih metod in nekaterih drugih metod, ki bi jih morali izpeljani razredi izvajati. Če pa uporabljate vmesnike, bi morali uporabiti vse metode v razredu, ki razširja vmesnik. Abstraktni razred je dobra izbira, če imate načrte za prihodnjo razširitev - tj. Če je v hierarhiji razredov verjetno razširitev v prihodnosti. Če želite zagotoviti podporo za prihodnjo razširitev pri uporabi vmesnikov, boste morali razširiti vmesnik in ustvariti novega.

Po drugi strani je po potrebi enostavno dodati nov vmesnik v hierarhijo. Če pa v svoji hierarhiji že imate abstraktni razred, ne morete dodati drugega, tj. Abstraktnega razreda lahko dodate le, če noben ni na voljo. Če želite pogodbo o nekem vedenju ali funkcionalnosti, uporabite vmesnik. Vmesnika ne smete uporabljati, če morate za metode vmesnika napisati isto kodo. V tem primeru uporabite abstraktni razred, enkrat definirajte metodo in jo po potrebi ponovno uporabite. Uporabljajte vmesnike za ločevanje kode aplikacije od določenih njenih izvedb ali za omejitev dostopa članom določene vrste.

Kot piše Microsoftova dokumentacija o vmesnikih:

Z uporabo vmesnikov lahko na primer v razred vključite vedenje iz več virov. Ta zmožnost je v C # pomembna, ker jezik ne podpira večkratnega dedovanja razredov. Poleg tega morate uporabiti vmesnik, če želite simulirati dedovanje struktur, ker jih dejansko ne morejo podedovati iz druge strukture ali razreda.

Implicitne in eksplicitne izvedbe vmesnikov

Vmesniki se lahko izvajajo implicitno ali eksplicitno. Naj pojasnim, kako se ti dve izvedbi razlikujeta. Razmislite o vmesniku z imenom IBusinessLogic.

javni vmesnik IBusinessLogic

{

void Initialize ();

}

Naslednji razred z imenom BusinessLogic izvaja IBusinessLogic vmesnik.

javni razred BusinessLogic: IBusinessLogic

{

javna praznina Initialize ()

   {

// Nekaj ​​kode

   }

}

Ustvarite lahko primerek datoteke BusinessLogic in izrecno pokličite Inicializiraj () metoda, kot je prikazano spodaj.

 IBusinessLogic businessLogic = novo BusinessLogic ();

businessLogic.Initialize ();

Naslednji delček kode prikazuje, kako lahko uporabite IBusinessLogic implicitno.

javni razred BusinessLogic: IBusinessLogic

{

void IBusinessLogic.Initialize ()

   {

   }

}

Zdaj lahko prikličete Inicializiraj () metoda na enak način s sklicevanjem na IBusinessLogic vmesnik. Razlika v obeh pristopih je v tem, da ko eksplicitno implementirate vmesnik v razredu, ste omejeni na klicanje metode vmesnika samo s sklicevanjem na vmesnik. Zato naslednji delček kode ne bi deloval, torej ne bi bil preveden.

 BusinessLogic businessLogic = novo BusinessLogic ();

businessLogic.Initialize ();

Kako narediti več v jeziku C #:

  • Kdaj uporabiti abstraktni razred v primerjavi z vmesnikom v jeziku C #
  • Kako delati z AutoMapper v C #
  • Kako uporabljati lambda izraze v jeziku C #
  • Kako delati z delegati Action, Func in Predicate v C #
  • Kako delati z delegati v C #
  • Kako implementirati preprost zapisovalnik v jeziku C #
  • Kako delati z atributi v jeziku C #
  • Kako delati z log4net v C #
  • Kako implementirati vzorec oblikovanja repozitorija v C #
  • Kako delati z refleksijo v jeziku C #
  • Kako delati z nadzornikom datotek v C #
  • Kako izvesti leno inicializacijo v C #
  • Kako delati z MSMQ v C #
  • Kako delati z razširitvenimi metodami v jeziku C #
  • Kako do lambda izrazov v jeziku C #
  • Kdaj uporabiti hlapljivo ključno besedo v jeziku C #
  • Kako uporabiti ključno besedo yield v jeziku C #
  • Kako uporabiti polimorfizem v jeziku C #
  • Kako zgraditi lasten načrtovalnik opravil v C #
  • Kako delati z RabbitMQ v C #
  • Kako delati s korpico v jeziku C #
  • Raziskovanje virtualnih in abstraktnih metod v jeziku C #
$config[zx-auto] not found$config[zx-overlay] not found