Introduksjon til overstyring i C #

Overriding i C # er reimplementering av en baseklasse-metode i en avledet klasse. I dette overstyres baseklasse-metoden i barneklasse. Den avledede klassemetoden har samme navn og signatur som baseklasse-metoden. Overriding er nyttig for å oppnå Runtime-polymorfisme.

Det er noen få nøkkelord som brukes i metodeoverskridelse.

1. Virtuelt - Dette nøkkelordet brukes med en baseklasse som betyr at metoden til en baseklasse kan overstyres.

public virtual void Method()
(
// implementation
)

2. Overstyring - Dette nøkkelordet brukes med en avledet klasse som betyr at avledet klasse overstyrer en metode for en baseklasse.

public override void Method()
(
// implementation
)

3. Base - Dette nøkkelordet brukes i en avledet klasse for å kalle baseklasse-metoden.

public override void Method()
(
base.Method();
// implementation
)

Hvordan overstyring fungerer i C #?

Nedenfor er et eksempel på hvordan vi kan implementere overstyring i C #.

class Parent
(
public virtual void Demo() // base class
(
Console.WriteLine(“This is parent”);
)
)
class Child: Parent
(
public override void Demo() // derived class
(
Console.WriteLine(“This is child”);
)
)

I eksemplet over er det to klasser, den ene er baseklasse eller foreldreklasse og den andre er avledet klasse, eller vi kan si, barneklasse. En baseklasse-metode er avledet i barneklasse. I denne er metoden hos en forelder virtuell, noe som betyr at den kan overstyres av barneklassen. Overstyring hos et barn betyr at denne metoden er den samme som foreldreklasse-metoden med samme metodesignatur.

Typer overstyring i C #

Nedenfor er eksemplene som viser overstyring av forskjellige nøkkelord.

Eksempel 1 - Uten virtuelle og overstyr nøkkelord

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public new void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
// main method
static void Main(string() args)
(
Bird b = new Peacock();
b.fly();
Console.ReadLine();
)
)
)

I eksemplet over er ikke noe nøkkelord brukt i begge basene så vel som avledede metoder.

Også i hovedmetode brukes foreldrehenvisning for å kalle barnemetoden. Så i dette tilfellet når ingen nøkkelord brukes, blir foreldremetoden kalt i stedet for en barnemetode. Slik blir utdataene

Utgang:

Eksempel 2 (a) - Med virtuelle og overstyr søkeord

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
// main method
static void Main(string() args)
(
Bird b = new Peacock();
b.fly();
Console.ReadLine();
)
)
)

I dette eksemplet brukes virtuell i baseklassen, som betyr at den gir myndighet til barneklasse til å implementere metoden på sin egen måte. I en avledet klasse brukes overstyring som betyr at barnemetoden er overstyringsmetoden. Begge metodene er de samme med samme navn og samme metodesignatur, men implementeringsdelen er forskjellig. I dette eksemplet brukes også foreldrehenvisning for å kalle barnemetoden. Men som en forelder er en metode er virtuell, så barnemetoden kalles først i stedet for foreldremetoden. Slik blir utdataene

Utgang:

Eksempel 2 (b) - Virtuelle og overstyr nøkkelord

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
//main method
static void Main(string() args)
(
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
)
)
)

Dette eksemplet er det samme som det forrige eksempelet, men denne underordnede metoden brukes til referanse.

Utgang:

Eksempel 3 - Med grunnleggende nøkkelord

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
base.fly(); // base is use to call parent method
Console.WriteLine("Peacock is flying");
)
)
class Program
(
static void Main(string() args)
(
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
)
)
)

I eksemplet ovenfor blir basen brukt i en avledet klasse for å kalle baseklasse-metoden. Så i denne basismetoden kalles først og deretter den avledede metoden.

Utgang:

Eksempel 4 - Abstrakte klasser med overstyring

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
abstract class Calculate
(
public abstract int sum();
)
class Values : Calculate // derived class
(
int val1;
int val2;
public Values(int a = 0, int b = 0)
(
val1 = a;
val2 = b;
)
public override int sum()
(
Console.WriteLine("sum of two values");
return (val1 + val2);
)
)
class Program
(
static void Main(string() args)
(
Values v = new Values(10, 20);
int a = v.sum();
Console.WriteLine(a);
Console.ReadLine();
)
)
)

I eksemplet over brukes en abstrakt metode. En abstrakt klasse implementeres av den avledede klassen som inneholder en abstrakt metode.

Utgang:

Regler for metodeoverskridelse

  • Metodesignaturen til en avledet klasse skal være den samme som en baseklasse.
  • Overstyring er ikke mulig i samme klasse.
  • Tilgangsmodifiserere må være de samme for virtuelle metoder og overstyringsmetoder.
  • Det virtuelle nøkkelordet brukes i baseklasse-metoden og Overstyring brukes i en avledet klassemetode.
  • Baseklasse-metoden skal ikke være statisk.

Konklusjon

Overstyring er nyttig i polymorfisme av kjøretid. Den lar avledet klasse implementere en baseklasse-metode på sin egen måte. Så metoden implementering er forskjellig fra avledet klasse fra sin baseklasse. Den overstyrte metoden kan være virtuell, overstyre eller abstrakt.

Anbefalte artikler

Dette er en guide til å overstyre i C #. Her diskuterer vi hvordan du bruker overordnede og forskjellige nøkkelord for Overriding i C # sammen med eksempler. Du kan også gå gjennom andre foreslåtte artikler -

  1. Unntakshåndtering i C #
  2. Arrays i C #
  3. Metodeoverskridelse i C #
  4. Variabler i C #
  5. Få tilgang til modifikatorer i PHP
  6. Polymorfisme i Java
  7. Abstrakte klasser i JavaScript
  8. Eksempler på dette nøkkelordet