Forskel mellem Abstrakt Klasse og Interface i C # Forskel mellem

Anonim

En abstrakt klasse ser meget ud som en grænseflade, men konceptet er lidt forvirrende for begynderne af OOP. Konceptuelt ser en abstrakt klasse ud som en grænseflade, selvfølgelig uden nogen implementering, men de har deres retfærdige andel af forskelle. Mens en abstrakt klasse kan enten delvis eller fuldt implementeres, skal en grænseflade implementeres fuldstændigt. Nå er den mest bemærkelsesværdige forskel mellem de to, at en abstrakt klasse kan have standard implementering, mens en grænseflade kun er definitionen af ​​metoder, der kun indeholder medlemserklæringerne. Lad os diskutere de teoretiske aspekter af begge detaljer.

Hvad er en abstrakt klasse?

En abstrakt klasse er en speciel type klasse, som fungerer som en base i andre klasser og kan ikke instansieres. Implementeringslogikken for en abstrakt klasse er tilvejebragt af sine afledte klasser. For at lave en klasse abstrakt, bruges den "abstrakte" modifikator, hvilket betyder, at nogle manglende implementeringsbehov skal implementeres i klassen afledt af den. Den indeholder både abstrakte og ikke-abstrakte medlemmer. En abstrakt klasse er beregnet til at tilvejebringe grundlæggende funktionalitet, som yderligere kan deles og overstyres af flere afledte klasser. Det er nyttigt at undgå enhver form for kodetilpasning. De ser meget ud som grænseflader, men med ekstra funktionalitet.

Hvad er et interface?

En grænseflade på den anden side er ikke en klasse, der kun indeholder signaturen af ​​funktionalitet. Det er et mønster uden implementering. Konceptuelt er det bare definitionen af ​​metoder, der kun indeholder medlemmernes erklæring. Det er en tom skal, som ikke indeholder implementeringen af ​​sine medlemmer. Det er som en abstrakt basisklasse, som kun indeholder abstrakte medlemmer som metoder, arrangementer, indeksere, egenskaber osv. Det kan ikke instantieres direkte, og dets medlemmer kan implementeres af enhver klasse. Derudover kan flere grænseflader implementeres af en klasse, dog kan en klasse kun arve en enkelt klasse.

Abstrakt Klasse vs Interface: Forskel mellem Abstrakt Klasse og Interface i C #

  1. Multiple Arvelance - En klasse kan kun bruge en abstrakt klasse, hvorfor flere arv ikke understøttes. En grænseflade kan på den anden side understøtte flere arv, hvilket betyder at en klasse kan arve et antal arv.
  2. Definition af Abstrakt klasse og grænseflade i C # - En abstrakt klasse er en speciel type klasse, som kan indeholde definition uden implementering. Implementeringslogikken leveres af sine afledte klasser. Det kan have abstrakte såvel som ikke-abstrakte metoder.En grænseflade er på den anden side blot et mønster, der ikke kan gøre noget. Teknisk set er det bare en tom skal.
  3. Implementering - En abstrakt klasse kan indeholde både definition og implementering. Det er en ufuldstændig klasse, som ikke kan oprettes. En grænseflade kan kun have underskrift af funktionaliteten uden nogen kode.
  4. Adgangsmodifikatorer - En abstrakt klasse kan have adskillige adgangsmodifikatorer som subs, funktioner, egenskaber osv., Mens en grænseflade ikke må have adgangsmodifikatorer, og alle metoder skal implicit defineres som offentlige.
  5. Homogenitet - En abstrakt klasse bruges til implementeringer af samme type, adfærd og status, mens en grænseflade bruges til implementeringer, der kun deler metodesignaturer.
  6. Deklaration - En abstrakt klasse fungerer som en grundklasse for alle andre klasser, så det kan erklære eller bruge en variabel, mens en grænseflade ikke må lov til at erklære nogen variabler.
  7. Konstruktørerklæring - Selvom en abstrakt klasse kan have konstruktørerklæring, kan en grænseflade ikke have konstruktørerklæring.
  8. Core vs Peripheral - En abstrakt klasse bruges til at definere en klasses kerneidentitet og kan bruges til objekter af samme datatype. En grænseflade derimod bruges til at definere en klasses perifere evner.
  9. Rigid vs Supple - En abstrakt klasse er mere smidig med hensyn til funktionalitet, i det mindste fra en udviklerperspektiv, mens en grænseflade er mere stiv.

Abstrakt klasse vs. Interface: Tabelformular

Abstrakt klasse

Interface

En abstrakt klasse kan have alle adgangsmodifikatorer til medlemserklæring af funktioner, subs og egenskaber. En grænseflade må ikke have adgangsmodifikatorer til medlemserklæring af funktioner, subs, egenskaber mv. Alle medlemmer antages at være implicit offentligt tilgængelige.
En klasse kan højst kun bruge en abstrakt klasse. En klasse kan arve ethvert antal grænseflader.
Flere arv understøttes ikke i abstrakt klasse. En grænseflade kan understøtte flere arv.
Teknisk set er det en klasse, der måske indeholder både definition og implementering. En grænseflade kan kun have underskrift af funktionalitet, så det er stort set en tom skal.
En abstrakt klasse kan indeholde medlemmer. consts, definerede metoder og metode stubs. En grænseflade kan kun indeholde metoder og consts.
Det definerer kerneidentiteten af ​​en klasse og bruges til at beskrive objekter af samme datatype. Det bruges til at beskrive perifer evner i en klasse.
Medlemmer af en abstrakt klasse kan ikke være statiske, medmindre det er et komplet medlem. Medlemmer af en grænseflade kan ikke være statiske.
Det er ideelt til implementeringer af samme art og almindelig adfærd. Det er bedre at bruge grænseflader, hvis flere implementeringer kun deler metodesignaturer.
Det kan have konstruktørerklæring. Det kan ikke have konstruktørerklæring.
En abstrakt klasse har foruddefinerede felter og constrants. Felter kan ikke defineres i grænseflader.
Det kan have både abstrakte og ikke-abstrakte metoder. Det kan kun have abstrakte metoder.

Sammendrag

Hvad er forskellen mellem en abstrakt klasse og en grænseflade? Dette er nok et af de mest almindelige spørgsmål i et teknisk interview. Du vil sandsynligvis finde en overflod af oplysninger om abstrakte klasser og grænseflader i enhver C # vejledning, men forståelsen af ​​forskellen mellem de to er ganske hård. Du kan konsolidere alle de oplysninger, du kan finde og stadig ikke kan få nok. Tja, begrebsmæssigt er begge de vigtigste vilkår i programmeringen og er helt ens, men de adskiller sig meget i form af funktionalitet. Mens en abstrakt klasse er en speciel type klasse, der fungerer som en base for andre klasser, er en grænseflade på den anden side blot en tom skal med kun medlemserklæringer.