Introduktion til metodeoverskridelse i C #
At tilsidesætte på enkle sigt betyder evnen til at ændre metodernes opførsel. Vi ved alle om den virtuelle funktion i C ++, hvor vi påberåber funktionen fra basisklassen i den afledte klasse. Fremgangsmådeoverskridelse i C # giver et lignende privilegium som Virtuel funktion i C ++. For at tage et eksempel på fuglene vil alle fuglene have den samme egenskab som flue, farve osv. Men forskellige fugle har en anden måde at flyve på, og farven varierer fra fugl til fugl. Så vi kan tilsidesætte Bird base-klassen metoder i afledte klasser som en papegøje, spurve, krage osv.
Hvordan bruger man tilsidesættelse i C #?
Antag, vores applikation har kravet om at ændre opførslen af baseklasse-metoden i en afledt klasse, så vi bør gå til metodeoverskridelse. For at opnå dette er vi nødt til at oprette metoden i den afledte klasse med den samme underskrift i baseklassen for at udføre en anden opgave. Inden vi lærer, hvordan vi bruger den altoverskyggende teknik, skal vi huske på nedenstående punkter.
- Ved C # -programmering kaldes metodeoverskridelsen også polymorfisme af kørselstid, sen binding eller dynamisk polymorfisme.
- Kun i afledte klasser er metodeoverskridelse mulig. Fordi en metode tilsidesættes i den afledte klasse fra baseklassen.
- Metoden skal være en ikke-virtuel eller statisk metode til tilsidesættelse.
- Adgangsniveaumodifikator for både overstyringsmetoden og den virtuelle metode skal være den samme.
Metoden, der tilsidesættes af tilsidesættelseserklæringen, kaldes den tilsidesatte basemetode. Dette vil være til stede i baseklassen. Den tilsidesatte basemetode kan være abstrakt, overstyret eller virtuel. Frisk implementering kaldet overstyringsmetode arves fra denne baseklasse.
Vi bruger forskellige nøgleord til metodeoverskridelse. De er,
1) Virtuelt nøgleord
Vi kompilatoren støder på det virtuelle nøgleord i programmet, det forstår, at denne metode kan tilsidesættes af en hvilken som helst af dens afledte klasser. Strukturen er som nedenfor.
public virtual int EnemyHealth()
(
Console.WriteLine("Enemy Health");
)
2) Tilsidesæt søgeord
Dette er til stede i den afledte klasse. Det fortæller kompilatoren, at denne metode tilsidesætter metoden med samme navn og underskrift i baseklassen.
public override int EnemyHealth ()
(
Console.WriteLine("Enemy 1");
)
Eksempel
Lad os først undersøge eksemplet uden at bruge det virtuelle og tilsidesætte søgeord.
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( );
)
)
Produktion:
I ovenstående eksempel oprettede vi et objekt fra Afledt klasse Parrotand, der gemmer sin reference i referencevariablen af typen Fugle.
I det næste trin, ved hjælp af referencevariablen objektet, påkalder vi funktionen Farve (). Da objekt indeholder en henvisning til et objekt af papegøje, er det naturligt, at vi forventer, at funktionen Farve () i klasse papegøje udføres. Men vi tager fejl. Skønheden ved programmeringen tillader ikke, at det sker.
Til vores overraskelse er det, der udføres, metoden Color () i fugleklasse. Det skyldes, at funktionen påberåbes baseret på referencetypen og ikke, hvad referencevariablen refererer til. Da objekt er en henvisning til fugle af type, aktiveres funktionen Farve () på klasse Fugle, uanset hvem objekt refererer til.
Lad os nu omskrive det samme program med virtuel og tilsidesætte Denne gang vil vi gå trin for trin for en bedre forståelse.
Opret en baseklasse med ethvert navn. Her bruger jeg Fugle. Skriv en metode med det virtuelle nøgleord. Dette vil være vores tilsidesatte metode, som vi vil tilsidesætte i den arvede klasse. Inde i metoden skal du skrive en besked, der skal udskrives i konsollen.
class Birds
(
public virtual void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
Opret nu endnu en papegøje til klassen Denne gang arver vi den fra den baseklasse, som vi oprettede tidligere, dvs. fugle. For at arve bruger vi symbolet ':'.
klasse Papegøje: Fugle
Skriv her en funktion med tilsidesættelse af nøgleord og skriv en meddelelse. Sørg for, at metodens navn og underskrift i den afledte klasse stemmer overens med metodenavnet og underskriften i baseklassen.
public override void Color ( )
(
Console.WriteLine("Parrot is Green");
)
Vi har brug for endnu en klasse for at udføre funktionaliteten for at kontrollere det overordnede. Opret en klasse med ethvert navn. Inde i skriver du hovedfunktionen.
class ExecutionClass
(
public static void Main( )
(
)
)
Opret et objekt i forældreklassen og udløs funktionen ved hjælp af klassens objekt. Dette påkalder farvemetoden, der findes i fuglen klassen.
Birds object;
object = new Birds( );
object .Color( );
Opret nu objektet for den afledte klasse og kalder farvemetoden. Dette påkalder farvemetoden i klassen Papegøje.
object = new Parrot( );
object.Color( );
Kan du gætte output når vi kører programmet? Dette er som vist nedenfor.
Produktion:
Nøgleordene tilsidesætter og virtuel tillader at påberåbe sig baseklassen og de afledte klassemetoder separat på ethvert tidspunkt, selvom metodenavne og underskrifter er ens.
Konklusion
I denne artikel forstod vi metoden tilsidesættelse, behovet for metoden tilsidesættelse, det virkelige eksempel på det altoverskyggende princip, måden at opnå det, nødvendigheden af at bruge de virtuelle og tilsidesætte nøgleord og eksemplet på tilsidesættelse ved hjælp af koden. Vi kan konkludere, at tilsidesættelse er en af de nyttige funktioner i polymorfisme, som vi kan ændre opførslen af baseklasse-metoden i den afledte klasse.
Anbefalede artikler
Dette er en guide til metodeoverskridelse i C #. Her diskuterer vi introduktionen, hvordan man bruger overordnede og forskellige nøgleord til metodeoverskridelse sammen med eksempler og trin. Du kan også se på de følgende artikler for at lære mere -
- C # Funktioner
- C # kommandoer
- Hvad er multithreading i C #?
- C # strengfunktioner
- Vejledning til tilsidesættelse i C ++
- Overstyring i Java
- Multithreading i C # med metoder