Wprowadzenie do wirtualnego słowa kluczowego w C #

Co to jest wirtualne słowo kluczowe? Przed przejściem do perspektywy C # ważne jest, aby zrozumieć lub zrewidować pojęcie dziedziczenia, zastępowania i wirtualnego słowa kluczowego w obiektowym świecie programowania.

Metoda zastępowania jest koncepcją OOP ściśle związaną z dziedziczeniem. Gdy metoda klasy podrzędnej przesłania metodę klasy nadrzędnej o tej samej nazwie, parametrach i typie zwracanym, określa się ją jako przesłaniającą metodę. Wirtualne słowo kluczowe wskazuje kompilatorowi, że metoda może zostać zastąpiona w klasach pochodnych.

W perspektywie C # słowo kluczowe wirtualne służy do modyfikowania deklaracji dowolnej właściwości, metody lub zdarzenia, aby umożliwić zastąpienie w klasie pochodnej. Mówiąc prościej, wirtualne słowo kluczowe implementuje metodę zastępującą metodę w C #.

Składnia

Każda właściwość, metoda lub zdarzenie mogą zostać zastąpione przez dodanie wirtualnego słowa kluczowego w klasie bazowej i zastąpienie słowa kluczowego w klasie pochodnej.

Dodaj wirtualne słowo kluczowe w deklaracji klasy podstawowej:

public class Base (
public virtual int abc ( get; set; ) // this property can be overridden
public virtual void Xyz() ( ) // this method can be overridden
)

Dodaj słowo kluczowe zastępujące w deklaracji klasy podstawowej:

public class Derived : Base (
public override int abc ( get; set; ) // this overrides the base class property
public override void Xyz() ( ) // this overrides the base class method
)

Jak działa Virtual w C #?

Bardzo podstawowa różnica między przeciążeniem a zastąpieniem polega na tym, że ten pierwszy jest mechanizmem czasu kompilacji, a drugi działa w czasie wykonywania. Wirtualne słowo kluczowe wchodzi w życie w czasie wykonywania, implementując w ten sposób koncepcję zastępującą metodę.

Po wywołaniu lub dostępie do dowolnej metody wirtualnej lub właściwości kompilator sprawdza, czy istnieje nadrzędny element metody lub właściwości. Jeśli zostanie znaleziony, zostanie wywołany. Jeśli nie zostanie znaleziony, wywoływana jest oryginalna metoda lub właściwość.

Powstaje tutaj doskonałe pytanie - co dzieje się w przypadku dziedziczenia wielopoziomowego? Cóż, jeśli jakikolwiek element klasy zostanie zastąpiony na więcej niż jednym poziomie, wywoływany jest najgłębszy element klasy (ten w klasie najbardziej pochodnej).

Przykład

Poniższy przykład wirtualnego słowa kluczowego w C # jest wymieniony poniżej

Dziedziczenie na jednym poziomie

Weźmy przykład, aby zrozumieć działanie wirtualnego słowa kluczowego, gdy pojedyncza klasa potomna dziedziczy klasę nadrzędną, tj. Nie ma dziedziczenia wielopoziomowego.

using System;
public class Polynomial
(
public virtual double len
(
get;
set;
)
public virtual double wid
(
get;
set;
)
public virtual double Area()
(
return len * wid;
)
)
public class Rectangle: Polynomial
(
)
public class Square : Polynomial
(
public override double len
(
get;
set;
)
public override double Area()
(
return len * len;
)
)
public class Circle : Polynomial
(
public double radius
(
get;
set;
)
public override double Area()
(
return Math.PI * radius * radius;
)
)
public class Triangle : Polynomial
(
public override double Area()
(
return 0.5 * len * wid;
)
)
public class Program
(
public static void Main()
(
var rect = new Rectangle();
rect.len = 5;
rect.wid = 10;
Console.WriteLine("Area of Rectangle = " + rect.Area());
var sq = new Square();
sq.len = 15;
Console.WriteLine("Area of Square = " + sq.Area());
var cir = new Circle();
cir.radius = 10;
Console.WriteLine("Area of Circle = " + cir.Area());
var tri = new Triangle();
tri.len = 5;
tri.wid = 10;
Console.WriteLine("Area of Triangle = " + tri.Area());
)
)

Jak działa powyższy kod?

W podstawowej klasie Wielomian zadeklarowaliśmy dwie właściwości i jedną metodę jako wirtualną. Można je teraz zastąpić w klasach potomnych. Teraz tworzymy różne klasy potomne o różnych kształtach dziedziczące klasę wielomianową.

W klasie Rectangle nie musimy zastępować żadnych właściwości ani metod. Implementacja klasy podstawowej działałaby tak, jak jest dla klasy Rectangle.

W klasie Square nie mamy właściwości width. Zastępujemy więc właściwość length i metodę Area, aby zwrócić kwadrat długości.

W klasie Circle nie mamy ani długości, ani szerokości. Dlatego deklarujemy nową właściwość promienia właściwą dla klasy i odpowiednio nadpisujemy metodę Area.

W klasie Triangle po prostu nadpisujemy metodę Area, a właściwości są dziedziczone z klasy bazowej Wielomian.

Kiedy tworzymy obiekty klas pochodnych, kompilator napotyka wirtualne słowo kluczowe podczas budowy klasy podstawowej, a zatem szuka nadpisanych elementów. Zastąpione elementy są następnie odpowiednio wywoływane.

Dziedziczenie wielopoziomowe

Zmodyfikujmy powyższy przykład, aby uwzględnić dziedziczenie wielopoziomowe.

using System;
public class Polynomial
(
public virtual double len ( get; set; )
public virtual double wid ( get; set; )
public virtual double Area()
( return 0; )
)
public class Rectangle : Polynomial
(
public override double Area()
( return len * wid; )
)
public class Square : Rectangle
(
public override double len ( get; set; )
public override double Area()
( return len * len; )
)
public class Program
(
public static void Main()
(
var rect = new Rectangle();
rect.len = 5;
rect.wid = 10;
Console.WriteLine("Area of Rectangle = " + rect.Area());
var sq = new Square();
sq.len = 15;
Console.WriteLine("Area of Square = " + sq.Area());
)
)

Zalety

Element wirtualny ma deklaracje i definicje zarówno w klasie podstawowej, jak i pochodnej. Elementy wirtualne są korzystne, gdy w klasach pochodnych wymagane są dodatkowe funkcje. Służą jako dodatki.

Zasady

  • Zmienna nie może być zadeklarowana jako wirtualna. Tylko właściwości, metody i zdarzenia mogą być deklarowane jako wirtualne.
  • Elementu statycznego nie można uznać za wirtualny.
  • Członka abstrakcyjnego nie można uznać za wirtualny.
  • Członka prywatnego nie można uznać za wirtualny.
  • Członka innego niż wirtualny nie można zastąpić.
  • Poziom dostępu, typ i nazwa zarówno wirtualnych członków, jak i nadrzędnych członków muszą być takie same. Na przykład, jeśli metoda wirtualna jest publiczna, metoda zastępująca musi być również publiczna.

Wniosek - wirtualne słowo kluczowe w C #

W tym artykule zrozumieliśmy pojęcie wirtualnego w języku C #. Widzieliśmy, jak C # implementuje wirtualne słowo kluczowe w czasie wykonywania i sprawdziliśmy przykłady.

Członkowie wirtualni to świetna koncepcja programowania obiektowego. Jednak w celu uzyskania dogłębnej wiedzy zdecydowanie zaleca się poznanie abstrakcyjnego słowa kluczowego, interfejsów i nowego słowa kluczowego. Pomogłoby to w zrozumieniu różnicy między nimi wszystkimi. Pomaga to w określeniu, kiedy używać, a kiedy nie korzystać z wirtualnego.

Polecane artykuły

To jest przewodnik po wirtualnym słowie kluczowym w C #. Tutaj omawiamy, jak działa Virtual w C # i jak działa powyższy kod z dziedziczeniem wielopoziomowym i zaletami. Możesz także spojrzeć na następujący artykuł, aby dowiedzieć się więcej-

  1. Kopiuj konstruktora w C #
  2. Dziedziczenie w C #
  3. Funkcje C #
  4. Instrukcja C # if
  5. Instrukcja If w Pythonie
  6. Przeciążenie w Javie
  7. Przeciążenie Pythona
  8. Dziedziczenie w PHP
  9. Kompletny przewodnik po dziedziczeniu w języku Python
  10. Typy konstruktorów w C # z implementacją kodu