Introducere în suprasolicitarea în C #

Suprasolicitarea în C # este reimplementarea unei metode de clasă de bază într-o clasă derivată. În acest sens, metoda clasei de bază este suprasolicitată în clasa copil. Metoda clasei derivate are același nume și semnătura ca metoda clasei de bază. Suprasolicitarea este utilă în realizarea polimorfismului Runtime.

Există câteva cuvinte cheie care sunt utilizate în suprasolicitarea metodei.

1. Virtual - Acest cuvânt cheie este utilizat cu o clasă de bază, ceea ce semnifică faptul că metoda unei clase de bază poate fi anulată.

public virtual void Method()
(
// implementation
)

2. Înlocuire - Acest cuvânt cheie este utilizat cu o clasă derivată care înseamnă că clasa derivată înlocuiește o metodă a unei clase de bază.

public override void Method()
(
// implementation
)

3. Baza - Acest cuvânt cheie este utilizat într-o clasă derivată pentru a apela la metoda clasei de bază.

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

Cum funcționează suprasolicitarea în C #?

Mai jos este un exemplu despre modul în care putem implementa suprasolicitarea în 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”);
)
)

În exemplul de mai sus există două clase, una este clasa de bază sau clasa părintească, iar cealaltă este clasa derivată sau putem spune, clasa copil. O metodă de clasă de bază este derivată în clasa copil. În acest mod, metoda unui părinte este virtuală ceea ce înseamnă că poate fi înlocuită de clasa copil. Înlocuirea la un copil înseamnă că această metodă este aceeași cu metoda clasei părinte cu aceeași semnătură a metodei.

Tipuri de suprapunere în C #

Mai jos sunt exemplele care arată imperative cu diferite cuvinte cheie.

Exemplul 1 - Fără cuvinte cheie virtuale și înlocuire

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

În exemplul de mai sus, niciun cuvânt cheie nu este utilizat atât în ​​bazele, cât și în metodele derivate.

Tot în metoda principală, referința părintească este utilizată pentru a numi metoda copilului. Deci, în acest caz, atunci când nu este utilizat niciun cuvânt cheie, metoda părinte este numită în locul unei metode copil. Deci, rezultatul va fi

Rezultat:

Exemplul 2 (a) - Cu cuvinte cheie virtuale și înlocuire

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

În acest exemplu, virtualul este utilizat în clasa de bază ceea ce înseamnă că dă autoritate clasei de copii pentru a implementa metoda în felul său. Într-o clasă derivată, se folosește înlocuirea, ceea ce înseamnă că metoda copil este metoda de înlocuire. Ambele metode sunt aceleași cu același nume și aceeași semnătură a metodei, dar partea de implementare este diferită. În acest exemplu, referința părintească este utilizată pentru a apela la metoda copilului. Dar, ca părinte este o metodă este virtuală, deci metoda copil este numită mai întâi în locul metodei părinte. Deci, rezultatul va fi

Rezultat:

Exemplul 2 (b) - Cuvinte cheie virtuale și înlocuire

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

Acest exemplu este același cu exemplul precedent, dar această metodă este folosită pentru acest copil.

Rezultat:

Exemplul 3 - Cu cuvânt cheie de bază

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

În exemplul de mai sus, baza este utilizată într-o clasă derivată pentru a numi metoda clasei de bază. Deci, în această metodă de bază se numește mai întâi și apoi metoda derivată.

Rezultat:

Exemplul 4 - clase abstracte cu suprasolicitare

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

În exemplul de mai sus, se utilizează o metodă abstractă. O clasă abstractă este implementată de clasa derivată care conține o metodă abstractă.

Rezultat:

Reguli pentru suprasolicitarea metodei

  • Semnătura metodei unei clase derivate ar trebui să fie aceeași cu o clasă de bază.
  • Suprasolicitarea nu este posibilă în aceeași clasă.
  • Modificatorii de acces trebuie să fie aceiași pentru metodele virtuale și metodele de înlocuire.
  • Cuvântul cheie virtual este utilizat în metoda clasei de bază, iar Override este utilizat într-o metodă derivată.
  • Metoda clasei de bază nu trebuie să fie statică.

Concluzie

Suprasolicitarea este utilă în timpul polimorfismului. Permite clasei derivate să implementeze o metodă de clasă de bază în felul său. Deci implementarea metodei este diferită de clasa derivată de clasa de bază. Metoda suprasolicitată poate fi virtuală, anulare sau abstractă.

Articole recomandate

Acesta este un ghid de suprasolicitare în C #. Aici vom discuta despre cum să utilizați cuvinte cheie superioare și diferite pentru Suprascrierea în C # împreună cu exemple. De asemenea, puteți parcurge și alte articole sugerate -

  1. Excepție manipulare în C #
  2. Arătări în C #
  3. Metoda de suprapunere în C #
  4. Variabile în C #
  5. Modificatori de acces în PHP
  6. Polimorfism în Java
  7. Clasele abstracte în JavaScript
  8. Exemple de acest cuvânt cheie