Uvod u prevladavanje u C #

Prevladavanje u C # je ponovna implementacija metode osnovne klase u izvedenoj klasi. U ovom je slučaju osnovna klasa prevladana u dječjoj klasi. Metoda izvedene klase ima isto ime i potpis kao metoda osnovne klase. Prevladavanje je korisno za postizanje polimorfizma runtimea.

Postoji nekoliko ključnih riječi koje se koriste u prevladavanju metoda.

1. Virtualna - Ova se ključna riječ koristi s osnovnom klasom koja označava da se metoda osnovne klase može prevladati.

public virtual void Method()
(
// implementation
)

2. Nadjačaj - Ova se ključna riječ koristi s izvedenom klasom koja označava da izvedena klasa nadjačava metodu osnovne klase.

public override void Method()
(
// implementation
)

3. Baza - Ova se ključna riječ koristi u izvedenom razredu za pozivanje metode osnovne klase.

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

Kako prevladavanje funkcionira u C #?

Ispod je primjer kako možemo implementirati presvlačenje u 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”);
)
)

U gornjem primjeru postoje dvije klase, jedna je osnovna klasa ili roditeljska klasa, a druga je izvedena klasa ili možemo reći, dječja klasa. Metoda bazne klase izvedena je u dječjoj klasi. Pri tome je metoda u roditelju virtualna, što znači da je može nadjačati dijete klasa. Prekoračiti u djetetu znači da je ova metoda ista kao i metoda roditeljske klase s istim potpisom metode.

Vrste prevladavanja u C #

Ispod su primjeri koji prikazuju prevladavanje različitih ključnih riječi.

Primjer 1 - Bez virtualnih i poništenih ključnih riječi

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

U gornjem primjeru nije korištena nijedna ključna riječ u obje baze, kao ni izvedene metode.

Također u glavnoj metodi, roditeljska referenca koristi se za pozivanje djetetove metode. Dakle, u ovom slučaju kada se ne koristi nijedna ključna riječ, umjesto nadređene metode naziva se roditeljska metoda. Dakle, izlaz će biti

Izlaz:

Primjer 2 (a) - s virtualnim i nadjačanim ključnim riječima

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

U ovom se primjeru virtual koristi u osnovnoj klasi što znači da daje ovlaštenje dječjoj klasi da implementira metodu na svoj način. U izvedenoj klasi koristi se override, što znači da je podređena metoda metoda preglasavanja. Obje su metode iste s istim imenom i istim potpisom metode, ali dio implementacije je različit. U ovom se primjeru za pozivanje djeteta koristi i referenca roditelja. No, kako je roditelj metoda je virtualna, tako se prvo postavlja metoda umjesto dijete. Dakle, izlaz će biti

Izlaz:

Primjer 2 (b) - Virtualne i poništene ključne riječi

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

Ovaj je primjer isti kao prethodni primjer, ali ovo se dijete koristi za referencu.

Izlaz:

Primjer 3 - s osnovnom ključnom riječi

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

U gornjem primjeru, baza se koristi u izvedenom razredu za pozivanje metode osnovne klase. Tako se u ovoj bazi metoda zove prvo, a zatim izvedena metoda.

Izlaz:

Primjer 4 - Sažetak klase s poništavanjem

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

U gornjem primjeru koristi se apstraktna metoda. Apstraktna klasa provodi izvedena klasa koja sadrži apstraktnu metodu.

Izlaz:

Pravila za prevladavanje metoda

  • Potpis metode izvedene klase trebao bi biti isti kao osnovna klasa.
  • Prevladavanje nije moguće u istoj klasi.
  • Modifikatori pristupa moraju biti isti za virtualne metode i metode za poništavanje.
  • Virtualna ključna riječ koristi se u metodi osnovne klase, a Override se koristi u izvedenoj metodi klase.
  • Metoda bazne klase ne smije biti statična.

Zaključak

Prevladavanje je korisno u polimorfizmu rada. To omogućuje izvedenoj klasi da na svoj način implementira metodu osnovne klase. Dakle, implementacija metode razlikuje se od izvedene klase od njezine osnovne klase. Prepisana metoda može biti virtualna, nadjačana ili apstraktna.

Preporučeni članci

Ovo je vodič za prevladavanje u C #. Ovdje smo raspravljali o tome kako koristiti presvlačenje i različite ključne riječi za preglasavanje u C # zajedno s primjerima. Možete i pregledati naše druge predložene članke -

  1. Rukovanje izuzecima u C #
  2. Nizovi u C #
  3. Poništavanje metode u C #
  4. Varijable u C #
  5. Pristupite modifikatorima na PHP-u
  6. Polimorfizam u Javi
  7. Sažetak nastave u JavaScript-u
  8. Primjeri ove ključne riječi

Kategorija: