Forskjell mellom abstrakt klasse og grensesnitt i C # Forskjellen mellom
En abstrakt klasse ser mye ut som et grensesnitt, men konseptet er litt forvirrende for nybegynnere av OOP. Konseptuelt ser en abstrakt klasse akkurat ut som et grensesnitt, selvsagt, uten implementering, men de har sin rettferdige andel av forskjeller. Mens en abstrakt klasse kan enten delvis eller fullt implementeres, må et grensesnitt implementeres helt. Vel, den mest bemerkelsesverdige forskjellen mellom de to er at en abstrakt klasse kan ha standardimplementering, mens et grensesnitt bare er definisjonen av metoder som bare inneholder medlemserklæringene. La oss diskutere de teoretiske aspektene av begge detaljene.
Hva er en abstrakt klasse?
En abstrakt klasse er en spesiell type klasse som fungerer som en base i andre klasser og kan ikke instansieres. Implementeringslogikken til en abstrakt klasse er gitt av sine avledede klasser. For å lage en klasse abstrakt, brukes "abstrakt" modifikator som betyr at noen manglende implementeringsbehov skal implementeres i klassen avledet fra den. Den inneholder både abstrakte og ikke-abstrakte medlemmer. En abstrakt klasse er ment å gi grunnleggende funksjonalitet som kan videre deles og overstyres av flere avledede klasser. Det er nyttig å unngå noen form for duplisering av kodene. De ser veldig mye ut som grensesnitt, men med ekstra funksjonalitet.
Hva er et grensesnitt?
Et grensesnitt, derimot, er ikke en klasse som bare inneholder signatur av funksjonalitet. Det er et mønster uten implementering. Konseptuelt sett er det bare definisjonen av metoder som bare inneholder medlemmernes erklæring. Det er et tomt skall som ikke inneholder implementeringen av sine medlemmer. Det er som en abstrakt baseklasse som bare inneholder abstrakte medlemmer som metoder, hendelser, indeksere, egenskaper, etc. Det kan ikke instantieres direkte og medlemmene kan implementeres av hvilken som helst klasse. I tillegg kan flere grensesnitt implementeres av en klasse, men en klasse kan bare arve en enkelt klasse.
Abstrakt klasse vs grensesnitt: forskjell mellom abstrakt klasse og grensesnitt i C #
- Flere arvelighet - En klasse kan bare bruke en abstrakt klasse, og derfor er ikke flere arv støttet. Et grensesnitt, derimot, kan støtte flere arv, noe som betyr at en klasse kan arve et hvilket som helst antall arv.
- Definisjon av Abstrakt klasse og grensesnitt i C # - En abstrakt klasse er en spesiell type klasse som kan inneholde definisjon uten implementering. Implementeringslogikken er gitt av sine avledede klasser. Det kan ha abstrakte og ikke-abstrakte metoder.Et grensesnitt, derimot, er bare et mønster som ikke kan gjøre noe. Teknisk er det bare et tomt skall.
- Implementering - En abstrakt klasse kan inneholde både definisjon og implementering. Det er en ufullstendig klasse som ikke kan ordnes. Et grensesnitt kan bare ha signaturen til funksjonaliteten uten kode.
- Tilgangsmodifikatorer - En abstrakt klasse kan ha flere tilgangsmodifiser som subs, funksjoner, egenskaper, osv., Mens et grensesnitt ikke har tilgang til modifikatorer og alle metoder må være implisitt definert som offentlige.
- Homogenitet - En abstrakt klasse brukes til implementeringer av samme type, oppførsel og status, mens et grensesnitt brukes til implementeringer som bare deler metodenes signaturer.
- Deklarasjon - En abstrakt klasse fungerer som en grunnklasse for alle andre klasser, slik at den kan deklarere eller bruke en variabel mens et grensesnitt ikke har lov til å erklære noen variabler.
- Konstruktørerklæring - Selv om en abstrakt klasse kan ha konstruktørdeklarasjon, kan et grensesnitt ikke ha en konstruktørdeklarasjon.
- Core vs. Peripheral - En abstrakt klasse brukes til å definere en klasses kjerneidentitet og kan brukes til objekter av samme datatype. Et grensesnitt, derimot, brukes til å definere en klasses perifere evne.
- Rigid vs Supple - En abstrakt klasse er mer smidig når det gjelder funksjonalitet, i hvert fall fra utviklerens perspektiv, mens et grensesnitt er stramt.
Abstrakt klasse vs. grensesnitt: Tabellform
Abstrakt klasse |
Grensesnitt |
En abstrakt klasse kan ha alle tilgangsmodifiseringer for medlemserklæring av funksjoner, subs og egenskaper. | Et grensesnitt har ikke tilgang til modifikatorer for medlemserklæring av funksjoner, subs, egenskaper, etc. Alle medlemmene antas å være implisitt offentlige. |
En klasse kan i det minste bare bruke en abstrakt klasse. | En klasse kan arve et hvilket som helst antall grensesnitt. |
Flere arv støttes ikke i abstrakt klasse. | Et grensesnitt kan støtte flere arv. |
Teknisk sett er det en klasse som kanskje inneholder både definisjon og implementering. | Et grensesnitt kan bare ha signatur av funksjonalitet, så det er i utgangspunktet et tomt skall. |
En abstrakt klasse kan inneholde medlemmer. consts, definerte metoder og metode stubber. | Et grensesnitt kan bare inneholde metoder og consts. |
Det definerer kjerneidentiteten til en klasse og brukes til å beskrive objekter av samme datatype. | Det brukes til å beskrive perifer evner i en klasse. |
Medlemmer av en abstrakt klasse kan ikke være statiske, med mindre det er et komplett medlem. | Medlemmer av et grensesnitt kan ikke være statiske. |
Den er ideell for implementeringer av samme type og vanlig oppførsel. | Det er bedre å bruke grensesnitt hvis flere implementeringer bare deler metodenes signaturer. |
Det kan ha konstruktørerklæring. | Det kan ikke ha konstruktørerklæring. |
En abstrakt klasse har forhåndsdefinerte felt og constrants. | Felter kan ikke defineres i grensesnitt. |
Det kan ha både abstrakte og ikke-abstrakte metoder. | Det kan bare ha abstrakte metoder. |
Sammendrag
Hva er forskjellen mellom en abstrakt klasse og et grensesnitt? Dette er trolig et av de vanligste spørsmålene i et teknisk intervju. Du er sannsynlig å finne en mengde informasjon om abstrakte klasser og grensesnitt i noen C # opplæring, men forstå forskjellen mellom de to er ganske vanskelig. Du kan konsolidere all informasjonen du finner og kan fortsatt ikke få nok. Vel, konseptuelt er begge de viktigste begrepene i programmeringen, og de er ganske like, men de varierer mye når det gjelder funksjonalitet. Mens en abstrakt klasse er en spesiell type klasse som fungerer som en base for andre klasser, er et grensesnitt på den annen side bare et tomt skall med kun medlemserklæringer.