Úvod do virtuálneho kľúčového slova v jazyku C #

Čo je virtuálne kľúčové slovo? Pred skokom priamo do perspektívy C # je dôležité porozumieť alebo zrevidovať koncept dedičnosti, nadradeného a virtuálneho kľúčového slova v objektovo orientovanom programovacom svete.

Metóda Overriding je koncept OOP úzko spojený s dedičnosťou. Keď metóda podradenej triedy potlačí metódu nadradenej triedy s rovnakým názvom, parametrami a typom návratu, nazýva sa prepísanie metódy. Virtuálne kľúčové slovo je znakom kompilátora, že metóda môže byť v odvodených triedach prepísaná.

Pokiaľ ide o perspektívu C #, virtuálne kľúčové slovo sa používa na úpravu deklarácie akejkoľvek vlastnosti, metódy alebo udalosti, aby sa umožnilo prepísanie v odvodenej triede. Jednoducho povedané, virtuálne kľúčové slovo implementuje koncept prepísania metódy v C #.

syntax

Každú vlastnosť, metódu alebo udalosť možno prepísať pridaním virtuálneho kľúčového slova do základnej triedy a prepísaním kľúčového slova v odvodenej triede.

Do deklarácie základnej triedy pridajte virtuálne kľúč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 deklarácie základnej triedy pridajte kľúčové slovo nahradenia:

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
)

Ako virtuálne funguje v C #?

Úplný základný rozdiel medzi preťažením a prvoradosťou je, že prvý je mechanizmus kompilácie, zatiaľ čo druhý je aktívny v čase spustenia. Virtuálne kľúčové slovo vstupuje do činnosti za behu, čím sa implementuje koncept prepísania metódy.

Keď je vyvolaná alebo sprístupnená akákoľvek virtuálna metóda alebo vlastnosť, kompilátor skontroluje prítomnosť prevažujúceho člena metódy alebo vlastnosti. Ak je nájdený, vyvolá sa. Ak sa nenájde, vyvolá sa pôvodná metóda alebo vlastnosť.

Vynára sa tu vynikajúca otázka - čo sa stane v prípade viacúrovňového dedičstva? Ak je niektorý člen triedy potlačený na viac ako jednej úrovni, vyvolá sa najhlbší potlačený člen (ten v najodvodenejšej triede).

príklad

Nasledujúci príklad virtuálneho kľúčového slova v C # je uvedený nižšie

Dedičstvo na jednej úrovni

Urobme príklad, aby sme pochopili fungovanie virtuálneho kľúčového slova, keď jedna podriadená trieda zdedí nadradenú triedu, tj neexistuje viacúrovňové dedičstvo.

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

Ako vyššie uvedený kód funguje?

V základnej triede Polynomial sme deklarovali dve vlastnosti a jednu metódu ako virtuálnu. Tieto môžu byť teraz potlačené v triedach pre deti. Teraz vytvárame rôzne podriadené triedy rôznych tvarov zdedených po triede Polynomial.

V triede Obdĺžnik nemusíme prepísať žiadnu vlastnosť alebo metódu. Implementácia základnej triedy by fungovala tak, ako je pre triedu Rectangle.

V triede Square nemáme vlastnosť width. Takže prepíšeme vlastnosť length a metódu Area, aby sme vrátili druhú mocninu dĺžky.

V triede Kruh nemáme ani dĺžku, ani šírku. Vyhlasujeme teda novú triedu špecifickú vlastnosť polomeru a zodpovedajúcim spôsobom prepíšeme metódu Area.

V triede trojuholník jednoducho prepíšeme metódu Area a vlastnosti sa zdedia z polynomu základnej triedy.

Keď vytvárame objekty odvodených tried, kompilátor sa stretne s virtuálnym kľúčovým slovom počas konštrukcie základnej triedy, a tak vyhľadá prepísané členy. Vyradení členovia sa potom zodpovedajúco použijú.

Viacúrovňové dedičstvo

Upravme uvedený príklad tak, aby zahŕňal viacúrovňové dedičstvo.

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álny člen má vyhlásenia a definície v základnej triede aj odvodených triedach. Virtuálne členy sú výhodné, ak sú v odvodených triedach potrebné niektoré ďalšie funkcie. Slúžia ako doplnky.

pravidlá

  • Premennú nie je možné deklarovať ako virtuálnu. Iba vlastnosti, metódy a udalosti možno deklarovať ako virtuálne.
  • Statický člen nemôže byť vyhlásený za virtuálny.
  • Abstraktný člen nemôže byť vyhlásený za virtuálneho.
  • Súkromný člen nemôže byť vyhlásený za virtuálneho.
  • Nev virtuálneho člena nemožno prepísať.
  • Úroveň prístupu, typ a názov virtuálnych členov a hlavných členov musia byť rovnaké. Napríklad, ak je virtuálna metóda verejná, prvoradá metóda musí byť tiež verejná.

Záver - Virtuálne kľúčové slovo v jazyku C #

V tomto článku sme pochopili pojem virtuálny v jazyku C #. Videli sme, ako C # implementuje virtuálne kľúčové slovo počas behu programu, a pozreli sme sa na príklady.

Virtuálni členovia sú skvelým konceptom objektovo orientovaného programovania. Ak však chcete získať podrobné informácie, dôrazne sa odporúčame dozvedieť sa viac o abstraktných kľúčových slovách, rozhraniach a nových kľúčových slovách. To by veľmi pomohlo pochopiť rozdiel medzi nimi. To pomáha pri uvedomovaní si, kedy používať a kedy nepoužiť virtuálne.

Odporúčané články

Toto je sprievodca virtuálnym kľúčovým slovom v jazyku C #. Tu diskutujeme o tom, ako virtuálne funguje v jazyku C # a ako vyššie uvedený kód funguje s viacúrovňovým dedičstvom a výhodami. Ak sa chcete dozvedieť viac, pozrite si nasledujúci článok

  1. Kopírovať konštruktor v jazyku C #
  2. Dedičnosť v C #
  3. C # Funkcie
  4. C # if Vyhlásenie
  5. If Vyhlásenie v Pythone
  6. Preťaženie v Jave
  7. Preťaženie Pythonu
  8. Dedičnosť v PHP
  9. Kompletný sprievodca dedičstvom v Pythone
  10. Typy konštruktorov v jazyku C # s implementáciou kódu

Kategórie: