Verschil tussen abstracte klasse en interface in C #

Een abstracte klasse lijkt veel op een interface, maar het concept is een beetje verwarrend voor de beginners van OOP. Conceptueel gezien ziet een abstracte klasse er net zo uit als een interface, natuurlijk, zonder enige implementatie, maar ze hebben wel een groot aantal verschillen. Hoewel een abstracte klasse geheel of gedeeltelijk kan worden geïmplementeerd, moet een interface volledig worden geïmplementeerd. Welnu, het meest opvallende verschil tussen de twee is dat een abstracte klasse standaardimplementatie kan hebben, terwijl een interface alleen de definitie van methoden is die alleen de ledendeclaraties bevat. Laten we de theoretische aspecten van beide in detail bespreken.

Wat is een abstracte klasse?

Een abstracte klasse is een speciaal type klasse dat als basis voor andere klassen fungeert en niet kan worden geïnstantieerd. De implementatielogica van een abstracte klasse wordt geleverd door de afgeleide klassen. Om een ​​class abstract te maken, wordt de "abstracte" modifier gebruikt, wat betekent dat een ontbrekende implementatie moet worden geïmplementeerd in de klasse die daarvan is afgeleid. Het bevat zowel abstracte als niet-abstracte leden. Een abstracte klasse is bedoeld om basisfunctionaliteit te bieden die verder kan worden gedeeld en opgeheven door meerdere afgeleide klassen. Het is handig om elke vorm van codeduplicatie te vermijden. Ze lijken erg op interfaces, maar met extra functionaliteit.

Wat is een interface?

Een interface daarentegen is geen klasse die alleen de handtekening van functionaliteit bevat. Het is een patroon zonder implementatie. Conceptueel gesproken is het alleen de definitie van methoden die alleen de verklaring van leden bevat. Het is een lege shell die de implementatie van zijn leden niet bevat. Het is als een abstracte basisklasse die alleen abstracte leden bevat, zoals methoden, gebeurtenissen, indexeerders, eigenschappen, enz. Het kan niet rechtstreeks worden geïnstantieerd en de leden ervan kunnen door elke klasse worden geïmplementeerd. Bovendien kunnen meerdere interfaces door een klasse worden geïmplementeerd, maar een klasse kan alleen een enkele klasse erven.

Abstracte klasse versus interface: verschil tussen abstracte klasse en interface in C #

  1. Meervoudige overerving - Een klasse kan slechts één abstracte klasse gebruiken, vandaar dat meerdere overerving niet wordt ondersteund. Een interface daarentegen kan meerdere overerving ondersteunen, wat betekent dat een klasse elk aantal overervingen kan erven.
  2. Definitie  van Abstracte klasse en interface in C #- Een abstracte klasse is een speciaal type klasse dat een definitie zonder implementatie kan bevatten. De implementatielogica wordt geleverd door de afgeleide klassen. Het kan zowel abstracte als niet-abstracte methoden hebben. Een interface daarentegen is slechts een patroon dat niets kan doen. Technisch gezien is het gewoon een lege schaal.
  3. Implementatie - Een abstracte klasse kan zowel definitie als de uitvoering ervan bevatten. Het is een onvolledige klasse die niet kan worden geïnstantieerd. Een interface kan alleen de handtekening van de functionaliteit hebben zonder enige code.
  4.  Toegangsmodificaties - Een abstracte klasse kan verschillende toegangsmodificatoren hebben, zoals subs, functies, eigenschappen enz., Terwijl een interface geen toegangsmodificatoren mag hebben en alle methoden impliciet moeten worden gedefinieerd als openbaar.
  5. homogeniteit - Een abstracte klasse wordt gebruikt voor implementaties van hetzelfde type, hetzelfde gedrag en dezelfde status, terwijl een interface wordt gebruikt voor implementaties die alleen handtekeningen voor methoden delen.
  6. Verklaring - Een abstracte klasse fungeert als een basisklasse voor alle andere klassen, zodat deze elke variabele kan declareren of gebruiken, terwijl een interface geen variabelen mag declareren.
  7. Constructeursverklaring - Hoewel een abstracte klasse een constructordeclaratie kan hebben, kan een interface geen constructordeclaratie hebben.
  8. Core vs. Peripheral - Een abstracte klasse wordt gebruikt om de kernidentiteit van een klasse te definiëren en kan worden gebruikt voor objecten van hetzelfde gegevenstype. Een interface, aan de andere kant, wordt gebruikt om het perifere vermogen van een klasse te definiëren.
  9. Stijve versus soepele - Een abstracte klasse is qua functionaliteit flexibeler, althans vanuit het perspectief van een ontwikkelaar, terwijl een interface stijver is.

Abstracte klasse versus interface: tabelvorm

Abstracte klasse

Interface

Een abstracte klasse kan alle toegangsmodificators hebben voor lidverklaring van functies, subs en eigenschappen. Het is een interface niet toegestaan ​​om toegangsmodificatoren te hebben voor het declareren van functies, subs, eigenschappen, etc. Alle leden worden verondersteld als impliciet publiek.
Een klas kan hoogstens één abstracte klasse gebruiken. Een klasse kan een willekeurig aantal interfaces erven.
Meerdere overerving wordt niet ondersteund in abstracte klasse. Een interface kan meerdere overerving ondersteunen.
Technisch gezien is het een klasse die al dan niet zowel de definitie als de implementatie ervan bevat. Een interface kan alleen de handtekening van de functionaliteit hebben, dus het is in feite een lege schaal.
Een abstracte klasse kan leden bevatten. consts, gedefinieerde methoden en methode-stubs. Een interface kan alleen methoden en consts bevatten.
Het definieert de kernidentiteit van een klasse en wordt gebruikt om objecten van hetzelfde gegevenstype te beschrijven. Het wordt gebruikt om de perifere mogelijkheden van een klasse te beschrijven.
Leden van een abstracte klasse kunnen niet statisch zijn tenzij het een volledig lid is. Leden van een interface kunnen niet statisch zijn.
Het is ideaal voor implementaties van hetzelfde type en gemeenschappelijk gedrag. Het is beter om interfaces te gebruiken als verschillende implementaties alleen methodenhandtekeningen delen.
Het kan constructordeclaratie hebben. Het kan geen verklaring van constructeur hebben.
Een abstracte klasse heeft vooraf gedefinieerde velden en constranten. Velden kunnen niet worden gedefinieerd in interfaces.
Het kan zowel abstracte als niet-abstracte methoden hebben. Het kan alleen abstracte methoden hebben.

Samenvatting

Wat is het verschil tussen een abstracte klasse en een interface? Dit is waarschijnlijk een van de meest gestelde vragen in elk technisch interview. Je zult waarschijnlijk een overvloed aan informatie vinden over abstracte klassen en interfaces in elke C # tutorial, echter, het verschil begrijpen tussen de twee is best lastig. U kunt alle informatie consolideren die u kunt vinden en nog steeds niet genoeg kunt krijgen. Nou, conceptueel zijn beide de belangrijkste termen in programmeren en zijn ze hetzelfde, maar ze verschillen erg in termen van functionaliteit. Hoewel een abstracte klasse een speciaal type klasse is dat als basis dient voor andere klassen, is een interface daarentegen slechts een lege schaal met alleen ledenverklaringen.