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

Anonim

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, cu toate acestea 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 numai 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ă are rolul de a furniza 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ă direct și membrii săi pot fi implementați de orice clasă. În plus, mai multe interfețe pot fi implementate de o clasă, însă o clasă poate moșteni doar o singură clasă.

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

moștenire multiplă

  1. - o clasă poate folosi doar o clasă abstractă, prin urmare, moștenirea multiplă nu este suportată. 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. Definiție
  2. 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ă. Implementare
  3. - 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. Omogenitate
  5. - O clasă abstractă este folosită 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. Declarație
  6. - O clasă abstractă acționează ca o clasă de bază pentru toate celelalte clase astfel încât să declare sau să utilizeze orice variabilă în timp ce o interfață nu are voie să declare vreo variabilă. Declarația constructorului
  7. - În timp ce o clasă abstractă poate avea o declarație constructor, o interfață nu poate avea declarația constructorului. Core vs. Peripheral
  8. - 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. Rigid vs. Supple
  9. - 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ă. Clasa abstractă vs. interfață: Forma tabelului

Clasa abstractă

Interfața

O clasă abstractă poate avea toți modificatori de acces pentru declarația membrilor de funcții, subsi ș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 mult 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 ei.
O interfață poate avea doar semnătura funcționalității, 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 obișnuit.
Este mai bine să utilizați interfețe dacă mai multe implementări împart doar semnături de metode. Poate avea declarația constructorului.
Nu poate avea declarație constructor. 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.
Poate avea doar 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.