Metoda przesłonięcia w C # - Wprowadzenie - Kroki - Zastosowanie przesłonięcia

Spisie treści:

Anonim

Wprowadzenie do zastępowania metod w C #

Nadpisanie w prostym znaczeniu oznacza możliwość modyfikacji zachowania metod. Wszyscy wiemy o funkcji wirtualnej w C ++, w której wywołujemy funkcję z klasy podstawowej w klasie pochodnej. Metoda przesłonięcia w języku C # zapewnia podobne uprawnienia jak funkcja wirtualna w języku C ++. Dla przykładu, wszystkie ptaki będą miały ten sam atrybut co mucha, kolor itp. Ale różne ptaki będą miały inny sposób latania, a kolor będzie się różnić w zależności od ptaka. Możemy więc zastąpić metody klasy bazowej Bird w klasach pochodnych, takich jak papuga, wróbel, wrona itp.

Jak korzystać z zastępowania w C #?

Załóżmy, że nasza aplikacja wymaga zmiany zachowania metody klasy bazowej w klasie pochodnej, wtedy powinniśmy przejść do zastąpienia metody. Aby to osiągnąć, musimy utworzyć metodę w klasie pochodnej z taką samą sygnaturą w klasie podstawowej, aby wykonać inne zadanie. Zanim nauczymy się korzystać z techniki zastępowania, musimy pamiętać o poniższych punktach.

  • W programowaniu w języku C # metoda zastępowania jest również nazywana polimorfizmem w czasie wykonywania, późnym wiązaniem lub polimorfizmem dynamicznym.
  • Tylko w klasach pochodnych możliwe jest przesłonięcie metody. Ponieważ metoda jest zastępowana w klasie pochodnej z klasy podstawowej.
  • Metoda powinna być nie-wirtualną lub statyczną metodą zastępowania.
  • Modyfikator poziomu dostępu zarówno metody zastępowania, jak i metody wirtualnej powinien być taki sam.

Metoda zastąpiona przez deklarację zastąpienia jest nazywana zastąpioną metodą podstawową. Będzie to obecne w klasie podstawowej. Zastąpiona metoda podstawowa może być abstrakcyjna, zastępowana lub wirtualna. Wywołana nowa implementacja, metoda override jest dziedziczona z tej klasy podstawowej.

Używamy różnych słów kluczowych do zastępowania metod. Oni są,

1) Wirtualne słowo kluczowe

My, kompilator napotyka wirtualne słowo kluczowe w programie, rozumie, że tę metodę można zastąpić dowolną z jej klas pochodnych. Struktura jest jak poniżej.

public virtual int EnemyHealth()
(
Console.WriteLine("Enemy Health");
)

2) Zastąp słowo kluczowe

Jest to obecne w klasie pochodnej. Informuje kompilator, że ta metoda zastępuje metodę o tej samej nazwie i podpisie w klasie bazowej.

public override int EnemyHealth ()
(
Console.WriteLine("Enemy 1");
)

Przykład

Najpierw spójrzmy na przykład bez użycia słowa kluczowego Virtual i override.

Kod:

class Birds
(
public void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
class Parrot:Birds
(
public void Color( )
(
Console.WriteLine("Parrot is Green");
)
)
class ExecutionClass
(
public static void Main( )
(
Birds object;
object = new Birds( );
object .Color( );
object = new Parrot( );
object.Color( );
)
)

Wynik:

W powyższym przykładzie utworzyliśmy obiekt klasy pochodnej Parrotand przechowujący jego referencję w referencyjnym obiekcie zmiennym typu Birds.

W następnym kroku, używając obiektu zmiennej odniesienia, wywołujemy funkcję Color (). Ponieważ obiekt zawiera odwołanie do obiektu typu Parrot, naturalne jest, że oczekujemy wykonania funkcji Color () klasy Parrot. Ale my się mylimy. Piękno programowania nie pozwoli na to.

Ku naszemu zdziwieniu, wykonywana jest metoda Color () klasy Birds. Jest tak, ponieważ funkcja jest wywoływana na podstawie typu odwołania, a nie tego, do którego odwołuje się obiekt zmiennej referencyjnej. Ponieważ obiekt jest odniesieniem do typu Birds, funkcja Color () klasy Birds będzie wywoływana, bez względu na to, do kogo odnosi się obiekt.

Teraz przepiszmy ten sam program za pomocą virtual i override. Tym razem krok po kroku przejdziemy do lepszego zrozumienia.

Utwórz klasę podstawową o dowolnej nazwie. Tutaj używam Birds. Napisz metodę z wirtualnym słowem kluczowym. To będzie nasza przesłonięta metoda, którą zastąpimy w odziedziczonej klasie. Wewnątrz metody napisz wiadomość do wydrukowania w konsoli.

class Birds
(
public virtual void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)

Teraz utwórz jeszcze jedną klasę Papuga Tym razem odziedziczymy ją od klasy podstawowej, którą wcześniej stworzyliśmy, tj. Ptaków. Do dziedziczenia używamy symbolu „:”.

klasa Papuga: Ptaki

Tutaj napisz funkcję z nadpisanym słowem kluczowym i napisz wiadomość. Upewnij się, że nazwa i podpis metody w klasie pochodnej są zgodne z nazwą i podpisem metody w klasie bazowej.

public override void Color ( )
(
Console.WriteLine("Parrot is Green");
)

Potrzebujemy jeszcze jednej klasy, aby wykonać funkcjonalność w celu sprawdzenia zastąpienia. Utwórz klasę o dowolnej nazwie. Wewnątrz tego napisz funkcję główną.

class ExecutionClass
(
public static void Main( )
(
)
)

Utwórz obiekt klasy nadrzędnej i uruchom funkcję, używając obiektu klasy. Spowoduje to wywołanie metody Color obecnej w klasie Birds.

Birds object;
object = new Birds( );
object .Color( );

Teraz utwórz obiekt klasy pochodnej i wywołaj metodę Color. Spowoduje to wywołanie metody Color klasy Parrot.

object = new Parrot( );
object.Color( );

Czy potrafisz zgadnąć, kiedy uruchomimy program? Jest to pokazane poniżej.

Wynik:

Przesłanianie słów kluczowych i virtual pozwala wywoływać klasę bazową i metody klas pochodnych osobno w dowolnym momencie, nawet jeśli nazwy metod i podpisy są takie same.

Wniosek

W tym artykule zrozumieliśmy metodę nadpisywania, potrzebę nadpisania metody, przykład nadpisania zasady w świecie rzeczywistym, sposób jej osiągnięcia, konieczność użycia słów kluczowych wirtualnych i zastępujących oraz przykład nadpisania za pomocą kodu. Możemy stwierdzić, że zastąpienie jest jedną z przydatnych cech polimorfizmu, którą możemy zmienić zachowanie metody klasy bazowej w klasie pochodnej.

Polecane artykuły

Jest to przewodnik po zastępowaniu metod w języku C #. Tutaj omawiamy wprowadzenie, jak używać przesłonięcia i różne słowa kluczowe do przesłonięcia metody wraz z przykładami i krokami. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Funkcje C #
  2. Komendy C #
  3. Co to jest wielowątkowość w C #?
  4. Funkcje ciągów C #
  5. Przewodnik po zastępowaniu w C ++
  6. Przesłanianie w Javie
  7. Wielowątkowość w C # z metodami