Uvod v preglasitev v C #

Prevladovanje v C # je ponovna implementacija metode osnovnega razreda v izpeljanem razredu. Pri tem je metoda osnovnega razreda v otroškem razredu razveljavljena. Metoda izpeljanega razreda ima isto ime in podpis kot metoda osnovnega razreda. Prevladovanje je koristno pri doseganju polimorfizma Runtime.

Obstaja nekaj ključnih besed, ki se uporabljajo pri prevladovanju metod.

1. Virtual - Ta ključna beseda se uporablja z osnovnim razredom, ki pomeni, da lahko metodo osnovnega razreda preglasimo.

public virtual void Method()
(
// implementation
)

2. Preveri - Ta ključna beseda se uporablja z izpeljanim razredom, ki pomeni, da izpeljani razred preglasi metodo osnovnega razreda.

public override void Method()
(
// implementation
)

3. Base - Ta ključna beseda se uporablja v izpeljanem razredu za klic metode osnovnega razreda.

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

Kako prevladovanje deluje v C #?

Spodaj je primer, kako lahko izvedemo prevlado v 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”);
)
)

V zgornjem primeru sta dva razreda, eden je osnovni razred ali nadrejeni razred, drugi pa je izpeljani razred ali lahko rečemo, otroški razred. Metoda osnovnega razreda je izvedena v otroškem razredu. Pri tem je metoda v staršu navidezna, kar pomeni, da ga lahko preglasi nadrejeni razred. Preglasitev pri otroku pomeni, da je ta metoda enaka metodi nadrejenega razreda z enakim podpisom metode.

Vrste preglasitve v C #

Spodaj so primeri, ki prikazujejo prevlado z različnimi ključnimi besedami.

Primer 1 - Brez virtualnih in preglasnih ključnih besed

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();
)
)
)

V zgornjem primeru se nobena ključna beseda ne uporablja v obeh podlagah, kot tudi izpeljane metode.

Tudi v glavni metodi se za klic otroške metode uporablja sklic staršev. V tem primeru, ko se ne uporablja nobena ključna beseda, se namesto nadrejene metode imenuje nadrejena metoda. Torej bo izhod

Izhod:

Primer 2 (a) - z virtualnimi in preglasnimi ključnimi besedami

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();
)
)
)

V tem primeru je virtualni uporabljen v osnovnem razredu, kar pomeni, da daje pooblastilo otroškemu razredu za izvajanje metode na svoj način. V izpeljanem razredu se uporablja override, kar pomeni, da je nadrejena metoda override metoda. Obe metodi sta enaki z istim imenom in istim podpisom metode, vendar je del izvedbe različen. Tudi v tem primeru se za klic otroške metode uporablja sklic staršev. Toda kot je starš metoda je virtualna, zato se namesto nadrejene metode najprej imenuje nadrejena metoda. Torej bo izhod

Izhod:

Primer 2 (b) - navidezne in preglasne ključne besede

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();
)
)
)

Ta primer je isti kot prejšnji primer, vendar se ta referenčna metoda uporablja za otroka.

Izhod:

Primer 3 - z osnovno ključno besedo

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();
)
)
)

V zgornjem primeru se osnova uporablja v izpeljanem razredu za klic metode osnovnega razreda. Torej se v tej osnovni metodi imenuje najprej in nato izpeljana metoda.

Izhod:

Primer 4 - Abstraktni razredi s prevlado

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();
)
)
)

V zgornjem primeru je uporabljena abstraktna metoda. Izvlečeni razred izvaja abstraktni razred, ki vsebuje abstraktno metodo.

Izhod:

Pravila za preglasitev metode

  • Podpis metode izvedenega razreda mora biti enak osnovnemu razredu.
  • V istem razredu ni mogoče preglasiti
  • Modifikatorji dostopa morajo biti enaki za virtualne metode in metode preglasitve.
  • Navidezna ključna beseda se uporablja v metodi osnovnega razreda, Override pa v izpeljani metodi razreda.
  • Metoda osnovnega razreda ne sme biti statična.

Zaključek

Prevladovanje je koristno pri polimorfizmu izvajanja. Izpeljanemu razredu omogoča, da na svoj način izvede metodo osnovnega razreda. Torej je izvedba metode drugačna od izpeljanega razreda od osnovnega razreda. Prepisana metoda je lahko virtualna, preglasna ali abstraktna.

Priporočeni članki

To je vodnik za Prevlado v C #. Tukaj razpravljamo o uporabi prevladujočih in različnih ključnih besed za preglasitev v C # skupaj s primeri. Ogledate si lahko tudi druge naše predlagane članke -

  1. Ravnanje izjem v C #
  2. Nizi v C #
  3. Prevladovanje metode v C #
  4. Spremenljivke v C #
  5. Dostop do modifikatorjev v PHP
  6. Polimorfizem na Javi
  7. Izvlečki razredi v JavaScript
  8. Primeri te ključne besede