Diferența dintre clasa abstractă și interfața în C #

O clasă abstractă arată foarte mult ca o interfață, dar conceptul este puțin confuz pentru începătorii OOP. Conceptual, o clasă abstractă arată ca o interfață, bineînțeles, fără nici o implementare, totuși ei au cota lor echitabilă de diferențe. În timp ce o clasă abstractă poate fi implementată parțial sau integral, o interfață trebuie implementată complet. Ei bine, diferența cea mai notabilă dintre cele două este că o clasă abstractă poate avea implementare implicită, în timp ce o interfață este doar definiția metodelor care conține doar declarațiile membrilor. Să discutăm aspectele teoretice ale ambelor în detaliu.

Ce este o clasă abstractă?

O clasă abstractă este un tip special de clasă care acționează ca bază a altor clase și nu poate fi instanțiată. Logica implementării unei clase abstracte este furnizată de clasele sale derivate. Pentru a face un rezumat de clasă, se utilizează modificatorul "abstract", ceea ce înseamnă că unele implementări lipsă trebuie implementate în clasa derivată din ea. Acesta conține atât membri abstracți, cât și membri ne-abstracți. O clasă abstractă este destinată să ofere funcționalități de bază care pot fi partajate și suprimate de mai multe clase derivate. Este util să evitați orice fel de duplicare a codului. Ele arata foarte mult ca interfete, dar cu funcționalitate adăugată.

Ce este o interfață?

O interfață, pe de altă parte, nu este o clasă care conține numai semnătura funcționalității. Este un model fără implementare. Din punct de vedere conceptual, este doar definirea metodelor care conțin doar declarația membrilor. Este o cochilie goală, care nu conține implementarea membrilor săi. Este ca o clasă de bază abstractă care conține numai elemente abstracte cum ar fi metode, evenimente, indexatoare, proprietăți etc. Nu poate fi instanțiată în mod direct și membrii săi pot fi implementați de orice clasă. În plus, mai multe interfețe pot fi implementate de o clasă, totuși, o clasă poate moșteni doar o singură clasă.

Clasa abstractă vs. interfață: diferența dintre clasa abstractă și interfața în C #

  1. Moștenire multiplă - O clasă poate folosi doar o clasă abstractă, prin urmare moștenirea multiplă nu este acceptată. O interfață, pe de altă parte, poate suporta mai multe moșteniri, ceea ce înseamnă că o clasă poate moșteni orice număr de moșteniri.
  2. Definiție  de Clasă abstractă și interfață în C #- O clasă abstractă este un tip special de clasă care poate conține o definiție fără implementare. Logica implementării este furnizată de clasele sale derivate. Poate să aibă metode abstracte, dar și ne-abstracte. O interfață, pe de altă parte, este doar un model care nu poate face nimic. Din punct de vedere tehnic, este doar o cochilie goală.
  3. Punerea în aplicare - O clasă abstractă poate conține atât definiția, cât și implementarea ei. Este o clasă incompletă care nu poate fi instanțiată. O interfață poate avea doar semnătura funcționalității fără cod.
  4.  Modificatori de acces - O clasă abstractă poate avea mai mulți modificatori de acces, cum ar fi subs, funcții, proprietăți etc. în timp ce o interfață nu are permisiunea de a avea modificatori de acces și toate metodele trebuie definite implicit ca fiind publice.
  5. Omogenitate - O clasă abstractă este utilizată pentru implementări de același tip, comportament și stare, în timp ce o interfață este utilizată pentru implementări care au doar semnături de metode.
  6. Declaraţie - O clasă abstractă acționează ca o clasă de bază pentru toate celelalte clase, astfel încât să poată declara sau utiliza orice variabilă în timp ce o interfață nu are voie să declare vreo variabilă.
  7. Declarația constructorului - În timp ce o clasă abstractă poate avea o declarație constructor, o interfață nu poate avea declarația constructorului.
  8. Core vs. Peripheral - O clasă abstractă este utilizată pentru a defini identitatea de bază a unei clase și poate fi utilizată pentru obiecte de același tip de date. O interfață, pe de altă parte, este utilizată pentru a defini capacitatea periferică a unei clase.
  9. Rigid vs. Supple - O clasă abstractă este mai suplă în termeni de funcționalitate, cel puțin dintr-o perspectivă a dezvoltatorului, în timp ce o interfață este mai rigidă.

Clasă abstractă vs. interfață: formă tabelară

Clasa abstractă

Interfață

O clasă abstractă poate avea toți modificatori de acces pentru declarația membrului de funcții, subs, și proprietăți. O interfață nu are permisiunea de a avea modificatori de acces pentru declarația membrilor de funcții, subs, proprietăți etc. Toți membrii sunt presupuși implicit publici.
O clasă poate folosi cel mai mult doar o singură clasă abstractă. O clasă poate moșteni orice număr de interfețe.
Moștenirea multiplă nu este acceptată în clasa abstractă. O interfață poate suporta mai multe moșteniri.
Din punct de vedere tehnic, este o clasă care poate sau nu să conțină atât definiția, cât și implementarea acesteia. O interfață poate avea doar semnătura de funcționalitate, deci este în esență o coajă goală.
O clasă abstractă poate conține membri. constra, metode definite, și metode de stubs. O interfață poate conține numai metode și conturi.
Definește identitatea de bază a unei clase și se utilizează pentru a descrie obiecte de același tip de date. Este folosit pentru a descrie abilitățile periferice ale unei clase.
Membrii unei clase abstracte nu pot fi statici decât dacă sunt membri compleți. Membrii unei interfețe nu pot fi statice.
Este ideal pentru implementări de același tip și comportament comun. Este mai bine să utilizați interfețe dacă mai multe implementări împart doar semnăturile metodelor.
Poate avea declarație constructor. Nu poate avea declarația constructorului.
O clasă abstractă are câmpuri predefinite și constante. Câmpurile nu pot fi definite în interfețe.
Poate avea atât metode abstracte, cât și metode non-abstracte. Nu poate avea decât metode abstracte.

rezumat

Care este diferența dintre o clasă abstractă și o interfață? Aceasta este probabil una dintre cele mai frecvente întrebări adresate în orice interviu tehnic. Este posibil să găsiți o mulțime de informații despre clasele și interfețele abstracte în orice tutorial C #, însă înțelegerea diferenței dintre cele două este o parte destul de dificilă. Puteți consolida toate informațiile pe care le puteți găsi și încă nu pot obține destul. Ei bine, din punct de vedere conceptual, ambii sunt cei mai importanți termeni în programare și sunt destul de aceeași, cu toate acestea, ele diferă foarte mult în termeni de funcționalitate. În timp ce o clasă abstractă este un tip special de clasă care acționează ca bază pentru alte clase, o interfață, pe de altă parte, este doar o coajă goală, cu doar declarații membre.