Úvod do virtuálního klíčového slova v C #

Co je virtuální klíčové slovo? Před skokem přímo do perspektivy C # je důležité porozumět nebo revidovat koncept dědičnosti, převažujícího a virtuálního klíčového slova ve objektově orientovaném programovacím světě.

Metoda Overriding je koncept OOP úzce spjatý s dědičností. Pokud metoda podřízené třídy přepíše metodu nadřazené třídy se stejným názvem, parametry a typem návratu, nazývá se přepisování metody. Virtuální klíčové slovo je označení kompilátoru, že metoda může být v odvozených třídách přepsána.

Pokud jde o perspektivu C #, virtuální klíčové slovo se používá k úpravě deklarace jakékoli vlastnosti, metody nebo události, aby bylo možné přepsat odvozenou třídu. Zjednodušeně řečeno, virtuální klíčové slovo implementuje koncept převažující metody v C #.

Syntax

Jakákoli vlastnost, metoda nebo událost lze přepsat přidáním virtuálního klíčového slova do základní třídy a přepsáním klíčového slova ve odvozené třídě.

Do deklarace základní třídy přidejte virtuální klíčové slovo:

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

Do deklarace základní třídy přidejte klíčové slovo pro přepsání:

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 virtuální funguje v C #?

Základním rozdílem mezi přetížením a překlenutím je to, že první je mechanismus kompilace, zatímco druhý je použit v době běhu. Virtuální klíčové slovo vstupuje do činnosti za běhu, čímž implementuje koncept potlačení metody.

Když je vyvolána nebo zpřístupněna jakákoli virtuální metoda nebo vlastnost, kompilátor zkontroluje převažujícího člena metody nebo vlastnosti. Pokud je nalezen, vyvolá se. Pokud není nic nalezeno, vyvolá se původní metoda nebo vlastnost.

Vyvstává zde vynikající otázka - co se stane v případě víceúrovňového dědictví? Pokud je některý člen třídy přepsán ve více než jedné úrovni, je vyvolán nejhlubší přepsaný člen (ten v nejodvozenější třídě).

Příklad

Následující příklad virtuálního klíčového slova v C # je uveden níže

Jednostupňové dědictví

Vezměme si příklad, abychom pochopili fungování virtuálního klíčového slova, když jedna podřízená třída zdědí nadřazenou třídu, tj. Neexistuje víceúrovňová dědičnost.

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 výše uvedený kód funguje?

V základní třídě Polynomial jsme deklarovali dvě vlastnosti a jednu metodu jako virtuální. Tyto mohou být nyní přepsány v podřízených třídách. Nyní vytváříme různé podřízené třídy různých tvarů, které zdědily třídu Polynomial.

Ve třídě Rectangle nemusíme přepisovat žádnou vlastnost nebo metodu. Implementace základní třídy by fungovala tak, jak je pro třídu Rectangle.

Ve třídě Square nemáme vlastnost width. Přepíšeme tedy vlastnost length a metodu Area a vrátíme čtverec délky.

Ve třídě Circle nemáme ani délku ani šířku. Prohlašujeme tedy novou vlastnost třídy poloměru specifickou pro třídu a odpovídajícím způsobem přepíšeme metodu Area.

Ve třídě Trojúhelník jednoduše přepíšeme metodu Area a vlastnosti jsou zděděny z polynomu základní třídy.

Když vytváříme objekty odvozených tříd, kompilátor narazí na virtuální klíčové slovo během konstrukce základní třídy a hledá tedy přepsané členy. Přepsaní členové jsou následně vyvoláni.

Víceúrovňové dědictví

Upravme výše uvedený příklad tak, aby zahrnoval víceúrovňové dědictví.

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

Výhody

Virtuální člen má deklarace a definice jak v základní třídě, tak v odvozených třídách. Virtuální členové jsou výhodní, pokud jsou v odvozených třídách vyžadovány některé další funkce. Slouží jako doplňky.

Pravidla

  • Proměnnou nelze prohlásit za virtuální. Pouze vlastnosti, metody a události lze deklarovat jako virtuální.
  • Statický člen nelze prohlásit za virtuální.
  • Abstraktní člen nemůže být prohlášen za virtuální.
  • Soukromého člena nelze prohlásit za virtuální.
  • Nev virtuálního člena nelze přepsat.
  • Úroveň přístupu, typ a název virtuálních členů a hlavních členů musí být stejné. Například, pokud je virtuální metoda veřejná, musí být veřejná také převažující metoda.

Závěr - Virtuální klíčové slovo v C #

V tomto článku jsme pochopili pojem virtuální v C #. Viděli jsme, jak C # implementuje virtuální klíčové slovo během běhu, a podívali jsme se na příklady.

Virtuální členové jsou skvělým konceptem objektově orientovaného programování. K získání podrobných znalostí se však důrazně doporučuje seznámit se s abstraktními klíčovými slovy, rozhraními a novými klíčovými slovy. To by velmi pomohlo pochopit rozdíl mezi nimi. To pomáhá při uvědomování, kdy použít a kdy nepoužívat virtuální.

Doporučené články

Toto je průvodce virtuálním klíčovým slovem v jazyce C #. Zde diskutujeme o tom, jak virtuální práce v C # a jak výše uvedený kód pracuje s víceúrovňovou dědičností a výhodami. Další informace naleznete také v následujícím článku.

  1. Kopírovat konstruktor v C #
  2. Dědičnost v C #
  3. C # Funkce
  4. C # if Prohlášení
  5. If Statement v Pythonu
  6. Přetížení v Javě
  7. Přetížení Pythonu
  8. Dědičnost v PHP
  9. Kompletní průvodce dědictvím v Pythonu
  10. Typy konstruktoru v jazyce C # s implementací kódu

Kategorie: