C# Flere arv

C# Flere arv

Programmerere kan bruke flere arv til å konstruere klasser som integrerer funksjoner fra forskjellige klasser og hierarkier. Det er også nyttig når en barneklasse ønsker å kombinere flere baseklassekontrakter. Flere arv støttes ikke i C# fordi programmererne mener det tilfører språket for overdreven kompleksitet mens de ikke gir nok fordel. På programmeringsspråket C# kan klassene bare arve fra en foreldreklasse, som blir referert til som enkeltarv.

Imidlertid kan grensesnitt eller en kombinasjon av klasse og grensesnitt (e) brukes, og grensesnittet (e) blir fulgt av klassenavnet i signaturen. Denne artikkelen viser hvordan flere arv kan oppnås i C# ved å bruke forskjellige tilnærminger.

Hva er C# grensesnitt

Flere arv er ikke mulig med klasser, som vi vet, men det er oppnåelig med grensesnitt når grensesnittnøkkelordet brukes. Grensesnittet gir bare definisjonene av metoder, egenskaper, hendelser og indeksere, men gir ingen kodeimplementering. Vi kan ikke legge til tilgangsmodifiserere til grensesnittmedlemmer siden de implisitt er offentlige og abstrakte. Variabler, konstante medlemmer, konstruktører, destructors og statiske medlemmer er alle ikke tillatt i et grensesnitt.

Viktigheten av C# grensesnitt

Et grensesnitt er ikke det samme som en klasse. Det har bare metodesignaturer. Det kan ikke opprettes siden den ikke har noen implementering. Klassene hentet fra den tilbyr implementeringslogikken. Et grensesnitt regnes ofte som en ren abstrakt klasse. Å bruke et grensesnitt i stedet for en abstrakt klasse har imidlertid fordelen av å støtte flere arv.

Hvordan implementere grensesnitt for C# flere arv

På C# -språket er det mange tilnærminger for å oppnå flere arvefunksjonalitet. For å vite det grunnleggende om å bruke grensesnitt for å implementere flere arv, har vi noen programmer i følgende illustrasjoner:

Eksempel 1: Implementering av flere klasser

Vi prøver å implementere flere arv i følgende klasse. Til å begynne med prøver vi å arve egenskapene til den første foreldreklassen og den andre foreldreklassen inn i barneklassen. Imidlertid vil kompilatoren kaste kjøretidsfeilen siden C# ikke støtter flere klassearv direkte.

Vi inkluderte systembibliotekene i begynnelsen av koden. Etter det opprettet vi en foreldreklasse, "frukt", og definerte også en metode i klassen som "Myfruits". I metoden “Myfruits” opprettet vi en liste som “MyList” og la til forskjellige elementer til listen ved å bruke ADD -metoden. Foreach -sløyfen brukes til å iterere over hvert element i listen og tilordne listeelementene til en ny variabel, “Elements”. Deretter opprettet vi en annen foreldreklasse, "Fruitcolors", og ga metoden "farger" for implementering. Vi la også til elementene i listen over klassen "farger" som i forrige klasse.

Nå har vi en barneklasse som heter “FruitDetails”, og denne barneklassen arver de to gitte foreldreklassene. Til slutt har vi hovedklassen "getDetails", der vi har en hovedmetode, og vi har laget objektet med barneklassen "FruitsDetails" i hovedmetoden. Disse objektene påkaller foreldreklassemetoden her, som vil forårsake tvetydighet i koden.

På kompileringstiden kaster programmet ovenfor et unntak om at "klasser ikke kan ha flere baseklasser", som vist i følgende bilde:

Eksempel 2: Implementering av grensesnitt for flere arv

Selv om C# ikke implementerer flere arv med klasser, kan vi oppnå det ved å bruke grensesnitt. Selv om grensesnitt gir fullstendig abstraksjon, klarer de ikke å inkludere spesifikke metoder.

I forrige kode bygde vi grensesnittet med nøkkelordet “grensesnitt”, og grensesnittet får navnet “Interface1”. Vi opprettet bare en metode "navn" og ingenting annet i grensesnittet. Deretter definerte vi en foreldreklasse, "student", som vi opprettet et grensesnitt. I foreldreklassen ga vi implementeringen for metoden "Navn". I metoden "Navn" har vi en liste over matriser representert som en "liste" der vi la til tilfeldige navn ved å bruke ADD -metoden. WritLine skriver ut listeelementene. Foreach -sløyfen brukes her for å iterere over hvert listeelement ved hjelp av den nyopprettede variabelen “Verdier”.

Deretter opprettet vi et annet grensesnitt, “Interface2”, for den andre foreldreklassen. Grensesnittet har bare metoden "fag". Vi har vår andre foreldreklasse, som implementerer grensesnittmetoden "fag". Deretter la vi til elementene på listen som i den første foreldreklassen. Deretter har vi barneklassen "detaljer", som arver de to spesifiserte grensesnittene, "grensesnitt1" og "grensesnitt2". I barneklassen opprettet vi objektene for foreldreklassene og fikk tilgang til “navnene” og “fagene” -metodene direkte ved hjelp av disse objektene. "Navnene" og "fag" -metodene er ikke endret siden grensesnittene arves av barneklassen. På slutten av koden har vi en hovedklasse, "demo", for å erklære gjenstandene i barneklassen og vise resultatene.

Følgende er resultatene vi fikk fra implementering av flere klasser ved bruk av grensesnitt:

Eksempel nr. 3: Implementering av grensesnitt arver et annet grensesnitt

Arven fra ett grensesnitt til et annet grensesnitt er mulig i C#. Når en klasse definerer et arvelig grensesnitt, må den implementere alle medlemmene som er erklært i arverekjeden. Merk at hvis en klasse bruker et grensesnitt, må alle metodene levert av det grensesnittet implementeres sammen med basisgrensesnittmetodene. Ellers blir en feil kastet av kompilatoren. Når både et avledet og et basisgrensesnitt er spesifisert, skjuler medlemmets navn på det avledede grensesnittet medlemmets navn på basisgrensesnittet.

I forrige kode erklærte vi et grensesnitt “bøker” og opprettet en metode “Book_no” i grensesnittet. Merk at vi ikke har definert en metode med noen tilgangspesifikator. Som standard er grensesnittmetoder offentlige. Hvis vi tildeler noen tilgangspesifikator til den, kaster kompilatoren en feil. Deretter implementerte vi et annet grensesnitt, "detaljer", som arver grensesnittet "bøker". Vi har også en metode for dette grensesnittet. Klassen er opprettet med navnet “Forfatter”, som vi implementerte de tidligere grensesnittene. Klassen arver bare grensesnittet “detaljer”, men vi arvet metoder for begge grensesnittene her. Til slutt definerte vi en "Demo" for førerklassen, der vi opprettet et objekt for klassen "forfatter" og kalte disse objektene for å få tilgang til "forfatterens" klassemetoder. Deretter ga vi verdiene til disse metodene.

Følgende er utgangen vi får fra grensesnittarven til et annet grensesnitt:

Konklusjon

Vi diskuterte det flere arvekonseptet i C#. Og vi ble kjent. Vi har en klar definisjon av grensesnittet sammen med dets betydning. Vi implementerte også grensesnittet i eksempelkoden for å demonstrere hvordan grensesnittet kan brukes i C#. Videre er det veldig nyttig å bruke grensesnitt da de skjuler en klasses implementering fra omverdenen. Nå håper jeg at du lærte om flere arv i C#. Flere relaterte emner om C# er tilgjengelige på Linux Hint.