En abstrakt klasse ligner meget en grænseflade, men konceptet er lidt forvirrende for begyndere af OOP. Konceptuelt ser en abstrakt klasse ligesom en grænseflade naturligvis uden nogen implementering, men de har deres retmæssige andel af forskelle. Mens en abstrakt klasse enten kan delvis eller fuldt implementeres, skal en grænseflade implementeres fuldstændigt. Den mest markante forskel mellem de to er, at en abstrakt klasse kan have standardimplementering, mens en grænseflade kun er definitionen af metoder, der kun indeholder medlemserklæringerne. Lad os diskutere de teoretiske aspekter af begge detaljer.
En abstrakt klasse er en speciel type klasse, der fungerer som en base af andre klasser og ikke kan instantieres. Implementeringslogikken for en abstrakt klasse leveres af dens afledte klasser. For at gøre en klassesabstrakt bruges den "abstrakte" modifikator, hvilket betyder, at en vis manglende implementering skal implementeres i klassen, der er afledt herfra. Det indeholder både abstrakte og ikke-abstrakte medlemmer. En abstrakt klasse er beregnet til at give grundlæggende funktionalitet, der kan deles yderligere og tilsidesættes af flere afledte klasser. Det er nyttigt at undgå enhver form for kodeduplikation. De ligner meget grænseflader, men med ekstra funktionalitet.
En grænseflade er på den anden side ikke en klasse, der kun indeholder signatur af funktionalitet. Det er et mønster uden implementering. Konceptuelt set er det kun definitionen af metoder, der kun indeholder medlemmers erklæring. Det er en tom shell, der ikke indeholder implementeringen af sine medlemmer. Det er som en abstrakt baseklasse, der kun indeholder abstrakte medlemmer, såsom metoder, begivenheder, indekseringsmænd, egenskaber osv. Det kan ikke instantieres direkte, og dets medlemmer kan implementeres af enhver klasse. Derudover kan flere grænseflader implementeres af en klasse, men en klasse kan dog kun arve en enkelt klasse.
Abstrakt klasse | grænseflade |
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 osv. Alle medlemmer antages som implicit offentligt. |
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 understøtter muligvis flere arv. |
Teknisk set er det en klasse, der muligvis indeholder eller ikke indeholder både definition og implementering. | En grænseflade kan kun have signatur af funktionalitet, så det er dybest set en tom skal. |
En abstrakt klasse kan indeholde medlemmer. consts, definerede metoder og metodestubber. | En grænseflade kan kun indeholde metoder og konsts. |
Den definerer en klasses kerneidentitet og bruges til at beskrive objekter af samme datatype. | Det bruges til at beskrive en klasses perifere evner. |
Medlemmer af en abstrakt klasse kan ikke være statiske, medmindre de er et komplet medlem. | Medlemmer af en grænseflade kan ikke være statiske. |
Det er ideelt til implementeringer af samme art og fælles opførsel. | 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 konstranter. | Felter kan ikke defineres i grænseflader. |
Det kan have både abstrakte og ikke-abstrakte metoder. | Det kan kun have abstrakte metoder. |
Hvad er forskellen mellem en abstrakt klasse og en grænseflade? Dette er sandsynligvis et af de mest almindelige spørgsmål, der stilles i enhver teknisk samtale. Du finder sandsynligvis en overflod af information om abstrakte klasser og grænseflader i enhver C # tutorial, men at forstå forskellen mellem de to er ganske den hårde del. Du kan konsolidere alle de oplysninger, du kan finde, og stadig ikke få nok. Nå, begrebsmæssigt er begge de vigtigste udtryk i programmering og er helt ens, men de adskiller sig meget hvad angår 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 bare en tom skal med kun medlemserklæringer.