Introduktion om metoderöverskridande i C #
Överskridande på enkla villkor innebär förmågan att ändra metodernas beteende. Vi vet alla om den virtuella funktionen i C ++, där vi åberopar funktionen från basklassen i den härledda klassen. Överträffande metod i C # ger ett liknande privilegium som Virtuell funktion i C ++. För att ta ett exempel på fåglarna kommer alla fåglar att ha samma attribut som fluga, färg osv. Men olika fåglar har ett annat sätt att flyga och färgen varierar från fågel till fågel. Så vi kan åsidosätta metoderna för Bird-basklass i härledda klasser som en papegoja, spurv, kråka osv.
Hur använder man överstyrning i C #?
Antag att vår ansökan har kravet på att ändra beteendet för basklassmetoden i en härledd klass, då bör vi gå till metodöverskridande. För att uppnå detta måste vi skapa metoden i den härledda klassen med samma signatur i basklassen för att utföra en annan uppgift. Innan vi lär oss att använda den övervägande tekniken måste vi tänka på nedanstående punkter.
- Vid C # -programmering kallas Method Overriding också körtidspolymorfism, sen bindning eller dynamisk polymorfism.
- Endast i de härledda klasserna är metoden överskridande möjlig. Eftersom en metod åsidosätts i den härledda klassen från basklassen.
- Metoden bör vara en icke-virtuell eller statisk metod för en åsidosättning.
- Åtkomstnivåmodifierare för både åsidosättningsmetoden och den virtuella metoden bör vara desamma.
Metoden som åsidosätts av åsidosättningsdeklarationen kallas den åsidosatta basmetoden. Detta kommer att finnas i basklassen. Den åsidosatta basmetoden kan vara antingen abstrakt, åsidosättande eller virtuell. Ny implementering som kallas, åsidosättningsmetod ärvs från denna basklass.
Vi använder olika nyckelord för att åsidosätta metoden. Dom är,
1) Virtuellt nyckelord
Vi kompilatorn möter det virtuella nyckelordet i programmet, det förstår att denna metod kan åsidosättas av någon av dess härledda klasser. Strukturen är som nedan.
public virtual int EnemyHealth()
(
Console.WriteLine("Enemy Health");
)
2) åsidosätta sökord
Detta är närvarande i den härledda klassen. Den säger kompilatorn att denna metod åsidosätter metoden med samma namn och signatur i basklassen.
public override int EnemyHealth ()
(
Console.WriteLine("Enemy 1");
)
Exempel
Låt oss först undersöka exemplet utan att använda det virtuella och åsidosätta nyckelordet.
Koda:
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 exemplet ovan skapade vi ett objekt från deriverad klass Parrotand som lagrar sin referens i referensvariabelobjektet av typen fåglar.
I nästa steg, med referensvariabelobjektet, åberopar vi funktionen Färg (). Eftersom objekt innehåller en referens till ett objekt av typen papegoja, är det naturligt att vi förväntar oss att funktionen Färg () för klass papegoja ska köras. Men vi har fel. Skönheten i programmeringen tillåter inte att det händer.
Till vår överraskning är det som utförs metoden Color () i fågelsklassen. Det beror på att funktionen åberopas baserat på typen av referens och inte på vad referensvariabelobjektet refererar till. Eftersom objekt är en referens av fåglar av typen kommer funktionen Färg () för klass Fåglar att anropas, oavsett vem objekt refererar till.
Låt oss nu skriva om samma program med virtuella och åsidosätta den här gången kommer vi att gå steg för steg för en bättre förståelse.
Skapa en basklass med valfritt namn. Här använder jag fåglar. Skriv en metod med det virtuella nyckelordet. Detta kommer att vara vår åsidosatta metod som vi kommer att åsidosätta i den ärvda klassen. Inne i metoden skriver du något meddelande som ska skrivas ut i konsolen.
class Birds
(
public virtual void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
Skapa nu ytterligare en papegoja klass Den här gången kommer vi att ärva den från basklassen som vi skapade tidigare, dvs fåglar. För att ärva använder vi symbolen ':'.
klass Papegoja: Fåglar
Här skriver du en funktion med åsidosättande nyckelord och skriver något meddelande. Se till att metodnamnet och signaturen i den härledda klassen matchar metodnamnet och signaturen i basklassen.
public override void Color ( )
(
Console.WriteLine("Parrot is Green");
)
Vi behöver ytterligare en klass för att utföra funktionaliteten för att kontrollera det åsidosatta. Skapa en klass med valfritt namn. Inuti det skriver du huvudfunktionen.
class ExecutionClass
(
public static void Main( )
(
)
)
Skapa ett objekt i förälderklassen och trigga funktionen med klassens objekt. Detta kommer att åberopa Color-metoden som finns i fågelsklassen.
Birds object;
object = new Birds( );
object .Color( );
Skapa nu objektet för den härledda klassen och anropa färgmetoden. Detta påkallar färgmetoden i klassen Parrot.
object = new Parrot( );
object.Color( );
Kan du gissa produktionen när vi kör programmet? Detta är som visas nedan.
Produktion:
Nyckelorden åsidosätter och virtuella gör det möjligt att åberopa basklassen och härledda klassmetoderna separat när som helst, även om metodnamnen och signaturerna är desamma.
Slutsats
I den här artikeln förstod vi metoden åsidosättande, behovet av metoden åsidosättande, verkliga exempel på den övervägande principen, sättet att uppnå det, nödvändigheten av att använda de virtuella och åsidosätta nyckelord och exemplet med att åsidosätta med koden. Vi kan dra slutsatsen att åsidosättande är en av de användbara funktionerna i polymorfism som vi kan ändra beteendet för basklassmetoden i den härledda klassen.
Rekommenderade artiklar
Detta är en guide till metoderöverskridande i C #. Här diskuterar vi introduktionen, hur man använder åsidosättande och olika nyckelord för metodöverskridande tillsammans med exempel och steg. Du kan också titta på följande artiklar för att lära dig mer -
- C # funktioner
- C # Kommandon
- Vad är multithreading i C #?
- C # Strängfunktioner
- Guide till överträffande i C ++
- Övergripande i Java
- Multitrådning i C # med metoder