Wprowadzenie do przesłonięcia w C #

Przesłonięcie w języku C # to ponowna implementacja metody klasy bazowej w klasie pochodnej. W tym przypadku metoda klasy bazowej jest zastępowana w klasie potomnej. Metoda klasy pochodnej ma taką samą nazwę i podpis jak metoda klasy bazowej. Przesłonięcie jest przydatne w osiągnięciu polimorfizmu w środowisku wykonawczym.

Istnieje kilka słów kluczowych, które są używane w zastępowaniu metod.

1. Wirtualny - to słowo kluczowe jest używane z klasą podstawową, co oznacza, że ​​można zastąpić metodę klasy podstawowej.

public virtual void Method()
(
// implementation
)

2. Zastąpienie - to słowo kluczowe jest używane z klasą pochodną, ​​co oznacza, że ​​klasa pochodna zastępuje metodę klasy bazowej.

public override void Method()
(
// implementation
)

3. Podstawa - to słowo kluczowe jest używane w klasie pochodnej w celu wywołania metody klasy podstawowej.

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

Jak działa przesłonięcie w C #?

Poniżej znajduje się przykład tego, jak możemy zaimplementować przesłonięcie w 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”);
)
)

W powyższym przykładzie są dwie klasy, jedna jest klasą podstawową lub rodzicielską, a druga jest klasą pochodną lub możemy powiedzieć, klasą potomną. Metodę klasy bazowej wyprowadza się w klasie potomnej. W tym przypadku metoda nadrzędna jest wirtualna, co oznacza, że ​​może zostać zastąpiona przez klasę potomną. Zastąpienie w potomku oznacza, że ​​ta metoda jest taka sama jak metoda klasy nadrzędnej z tą samą sygnaturą metody.

Rodzaje przesłonięcia w C #

Poniżej znajdują się przykłady pokazujące zastąpienie różnymi słowami kluczowymi.

Przykład 1 - Bez wirtualnych i zastępujących słów kluczowych

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

W powyższym przykładzie żadne słowo kluczowe nie jest używane zarówno w bazach, jak i metodach pochodnych.

Również w głównej metodzie do wywołania metody potomnej służy odwołanie nadrzędne. Dlatego w tym przypadku, gdy nie jest używane słowo kluczowe, zamiast metody potomnej wywoływana jest metoda nadrzędna. Więc wynik będzie

Wynik :

Przykład 2 (a) - Z wirtualnymi i zastępującymi słowami kluczowymi

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

W tym przykładzie wirtualny jest używany w klasie bazowej, co oznacza, że ​​daje on klasie potomnej uprawnienia do implementacji metody na swój własny sposób. W klasie pochodnej stosowane jest przesłonięcie, co oznacza, że ​​metoda potomna jest metodą przesłonięcia. Obie metody są takie same z tą samą nazwą i tą samą sygnaturą metody, ale część implementacyjna jest inna. W tym przykładzie również odwołanie nadrzędne jest używane do wywołania metody potomnej. Ale jako nadrzędna metoda jest wirtualna, więc metoda podrzędna jest wywoływana jako pierwsza zamiast metody nadrzędnej. Więc wynik będzie

Wynik :

Przykład 2 (b) - słowa kluczowe wirtualne i zastępujące

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

Ten przykład jest taki sam jak w poprzednim przykładzie, ale ta metoda potomna jest używana jako odniesienie.

Wynik :

Przykład 3 - Z podstawowym słowem kluczowym

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

W powyższym przykładzie baza jest używana w klasie pochodnej do wywoływania metody klasy bazowej. Tak więc w tej podstawowej metodzie nazywa się najpierw, a następnie metodą pochodną.

Wynik :

Przykład 4 - Klasy abstrakcyjne z przesłonięciem

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

W powyższym przykładzie użyto metody abstrakcyjnej. Klasa abstrakcyjna jest implementowana przez klasę pochodną, ​​która zawiera metodę abstrakcyjną.

Wynik :

Zasady zastępowania metod

  • Sygnatura metody klasy pochodnej powinna być taka sama jak klasa bazowa.
  • Zastąpienie nie jest możliwe w tej samej klasie.
  • Modyfikatory dostępu muszą być takie same dla metod wirtualnych i metod zastępowania.
  • Wirtualne słowo kluczowe jest używane w metodzie klasy bazowej, a Override jest stosowane w metodzie klasy pochodnej.
  • Metoda klasy bazowej nie powinna być statyczna.

Wniosek

Przesłanianie jest przydatne w polimorfizmie środowiska wykonawczego. Pozwala klasie pochodnej na implementację metody klasy bazowej na swój własny sposób. Zatem implementacja metody różni się od klasy pochodnej od jej klasy bazowej. Zastąpiona metoda może być wirtualna, zastąpiona lub abstrakcyjna.

Polecane artykuły

Jest to przewodnik po zastępowaniu w C #. Tutaj omawiamy, jak używać przesłonięcia i różnych słów kluczowych do przesłonięcia w C # wraz z przykładami. Możesz także przejrzeć nasze inne sugerowane artykuły -

  1. Obsługa wyjątków w C #
  2. Tablice w C #
  3. Przesłanianie metod w języku C #
  4. Zmienne w C #
  5. Dostęp do modyfikatorów w PHP
  6. Polimorfizm w Javie
  7. Klasy abstrakcyjne w JavaScript
  8. Przykłady tego słowa kluczowego