Metodeoverskridelse i C # - Innledning - Trinn - Bruk av overstyring

Innholdsfortegnelse:

Anonim

Introduksjon om metodeoverskridelse i C #

Å overstyre på enkle sikt betyr muligheten til å endre metodenes oppførsel. Vi vet alle om den virtuelle funksjonen i C ++, der vi påkaller funksjonen fra baseklassen i den avledede klassen. Overstyring av metode i C # gir et lignende privilegium som Virtuell funksjon i C ++. For å ta et eksempel på fuglene, vil alle fuglene ha samme attributt som flue, farge, etc. Men forskjellige fugler vil ha en annen måte å fly på, og fargen vil variere fra fugl til fugl. Så vi kan overstyre metodene for Bird base-klassen i avledede klasser som en papegøye, spurve, kråke osv.

Hvordan bruke overstyring i C #?

Anta at applikasjonen vår har krav om å endre oppførselen til baseklasse-metoden i en avledet klasse, så bør vi gå for metodeoverskridelse. For å oppnå dette, må vi lage metoden i den avledede klassen med samme signatur i baseklassen for å utføre en annen oppgave. Før vi lærer hvordan vi bruker den overordnede teknikken, må vi huske på følgende punkter.

  • I C # -programmering kalles Method Overriding også Run time polymorfisme, sen binding eller dynamisk polymorfisme.
  • Bare i avledede klasser er metoden overstyring mulig. Fordi en metode overstyres i den avledede klassen fra baseklassen.
  • Metoden skal være en ikke-virtuell eller statisk metode for en overstyring.
  • Tilgangsnivåmodifiserer for både overstyringsmetoden og den virtuelle metoden skal være den samme.

Metoden som overstyres av overstyringserklæringen kalles overstyrt basemetode. Dette vil være til stede i grunnklassen. Den overstyrte basemetoden kan være abstrakt, overstyring eller virtuell. Frisk implementering kalt overstyringsmetode arves fra denne baseklassen.

Vi bruker forskjellige nøkkelord for metodeoverskridelse. De er,

1) Virtuelt nøkkelord

Vi kompilatoren møter det virtuelle nøkkelordet i programmet, det forstår at denne metoden kan overstyres av noen av dens avledede klasser. Strukturen er som nedenfor.

public virtual int EnemyHealth()
(
Console.WriteLine("Enemy Health");
)

2) Overstyr søkeord

Dette er til stede i den avledede klassen. Den forteller kompilatoren at denne metoden overstyrer metoden med samme navn og signatur i grunnklassen.

public override int EnemyHealth ()
(
Console.WriteLine("Enemy 1");
)

Eksempel

La oss først se på eksemplet uten å bruke det virtuelle og overstyre nøkkelordet.

Kode:

class Birds
(
public void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
class Parrot:Birds
(
public void Color( )
(
Console.WriteLine("Parrot is Green");
)
)
class ExecutionClass
(
public static void Main( )
(
Birds object;
object = new Birds( );
object .Color( );
object = new Parrot( );
object.Color( );
)
)

Produksjon:

I eksemplet ovenfor opprettet vi et objekt fra Derived class Parrotand og lagret referansen i referansevariabelen av typen fugler.

I neste trinn, bruker vi referansevariabelen objektet, påkaller vi funksjonen Farge (). Siden objekt inneholder en henvisning til et objekt av papegøyer, er det naturlig at vi forventer at funksjonen Farge () for klasse papegøyer blir utført. Men vi tar feil. Det fine med programmeringen lar ikke det skje.

Til vår overraskelse er det som utføres Color () -metoden i fugleklasse. Det er fordi funksjonen påberopes basert på referansetypen, og ikke hva referansevariabelen viser til. Siden objekt er en referanse til type fugler, vil funksjonen Farge () på klasse fugler bli påberopt, uansett hvem objekt refererer til.

La oss nå skrive om det samme programmet med virtuell og overstyre Denne gangen vil vi gå trinn for trinn for en bedre forståelse.

Lag en baseklasse med hvilket som helst navn. Her bruker jeg Birds. Skriv en metode med det virtuelle nøkkelordet. Dette vil være vår overstyrte metode som vi vil overstyre i den arvede klassen. Inne i metoden skriver du noen meldinger som skal skrives ut i konsollen.

class Birds
(
public virtual void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)

Opprett nå en parrot papegøye mer. Denne gangen skal vi arve den fra baseklassen som vi opprettet tidligere, dvs. fugler. For å arve bruker vi symbolet ':'.

klasse Papegøye: Fugler

Skriv her en funksjon med overstyre nøkkelord og skriv litt melding. Forsikre deg om at metodenavnet og signaturen i den avledede klassen stemmer overens med metodenavnet og signaturen i grunnklassen.

public override void Color ( )
(
Console.WriteLine("Parrot is Green");
)

Vi trenger en klasse til for å utføre funksjonaliteten for å sjekke det overstyrende. Lag en klasse med hvilket som helst navn. Inne som skriver hovedfunksjonen.

class ExecutionClass
(
public static void Main( )
(
)
)

Lag et objekt av foreldreklassen og trigg funksjonen ved hjelp av klassens objekt. Dette vil påkalle Color-metoden som er til stede i fuglene-klassen.

Birds object;
object = new Birds( );
object .Color( );

Opprett nå objektet for den avledede klassen og ring Color-metoden. Dette vil påkalle Color-metoden i Parrot-klassen.

object = new Parrot( );
object.Color( );

Kan du gjette resultatet når vi kjører programmet? Dette er som vist nedenfor.

Produksjon:

Søkeordene overstyrer og virtuelle gjør det mulig å påkalle baseklassen og avledede klassemetoder separat når som helst, selv om metodenavn og signaturer er de samme.

Konklusjon

I denne artikkelen forsto vi metoden overstyring, behovet for metoden overstyring, ekte verdenseksempel på det overordnede prinsippet, måten å oppnå det, nødvendigheten av å bruke de virtuelle og overstyre nøkkelordene og eksemplet på å overstyre bruk av koden. Vi kan konkludere med at overstyring er en av de nyttige funksjonene i polymorfisme som vi kan endre oppførselen til baseklasse-metoden i den avledede klassen.

Anbefalte artikler

Dette er en guide til metodeoverskridelse i C #. Her diskuterer vi introduksjonen, hvordan bruke overordnede og forskjellige nøkkelord for metodeoverskridelse sammen med eksempler og trinn. Du kan også se på følgende artikler for å lære mer -

  1. C # Funksjoner
  2. C # Kommandoer
  3. Hva er multithreading i C #?
  4. C # Strengfunksjoner
  5. Veiledning for overstyring i C ++
  6. Overstyrer i Java
  7. Multithreading i C # med metoder