Uvod v virtualno ključno besedo v C #

Kaj je virtualna ključna beseda? Pred skokom naravnost v perspektivo C # je pomembno razumeti ali revidirati koncept dedovanja, prevladovanja in virtualne ključne besede v objektno usmerjenem programskem svetu.

Preveriranje metode je koncept OOP, ki je tesno povezan z dedovanjem. Ko metoda nadrejenega razreda preglasi metodo istoimenskega imena, parametrov in vrnilnega razreda nadrejenega razreda, se imenuje kot preglasitev metode. Navidezna ključna beseda je prevajalniku pokazatelj, da je metoda mogoče preglasiti v izvedenih razredih.

V perspektivi C # se virtualna ključna beseda uporablja za spreminjanje izjave katere koli lastnosti, metode ali dogodka, da se omogoči preglasitev v izpeljanem razredu. Preprosto povedano, virtualna ključna beseda izvede koncept prevladovanja metode v C #.

Sintaksa

Vsako lastnost, način ali dogodek lahko nadomestite z dodajanjem navidezne ključne besede v osnovnem razredu in preglasitve ključne besede v izpeljanem razredu.

V deklaracijo osnovnega razreda dodajte navidezno ključno besedo:

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

V deklaracijo osnovnega razreda dodajte ključno besedo prepisa:

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
)

Kako navidezno deluje v C #?

Osnovna razlika med preobremenitvijo in preglasitvijo je v tem, da je prvi mehanizem za prevajanje, drugi pa se začne izvajati med izvajanjem. Navidezna ključna beseda začne delovati med izvajanjem in tako izvaja koncept prevladovanja metode.

Ko se do katerega koli navideznega načina ali lastnosti prikliče ali dostopa, prevajalnik preveri, ali je član metode ali lastnosti pomemben. Če ga najdete, ga prikličete. Če nobene ni mogoče najti, se prikliče izvirni način ali lastnost.

Tu se postavlja odlično vprašanje - kaj se zgodi v primeru dedovanja na več ravneh? No, če je katerikoli član razreda preglasan na več kot eni ravni, se prikliče najgloblji preobremenjeni član (tisti v najbolj izpeljanem razredu).

Primer

Spodaj je omenjen primer virtualne ključne besede v C #

Enostopenjsko dedovanje

Vzemimo primer za razumevanje delovanja virtualne ključne besede, ko en sam otroški razred podeduje nadrejeni razred, torej ni večstopenjske dednosti.

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

Kako deluje zgoraj navedeni kodeks?

V osnovnem razredu Polinom smo dve lastnosti in eno metodo razglasili za navidezno. Te je zdaj mogoče razveljaviti v otroških razredih. Zdaj ustvarjamo različne otroške razrede različnih oblik, ki podedujejo razred Polinom.

V razredu Rectangle nam ni treba preglasiti nobene lastnosti ali metode. Izvedba osnovnega razreda bi delovala tako, kot je za razred Rectangle.

V razredu Square nimamo lastnosti širine. Torej preglasimo lastnost dolžine in metodo Area, da vrnemo kvadrat dolžine.

V razredu Circle nimamo niti dolžine niti širine. Torej, izjavimo novo lastnost polmera, ki je značilna za razred, in ustrezno nadomestimo metodo Area.

V razredu Trikotnik preprosto preglasimo metodo Area in lastnosti podedujemo iz osnovnega razreda Polinom.

Ko ustvarjamo predmete iz izvedenih razredov, prevajalnik med gradnjo osnovnega razreda naleti na virtualno ključno besedo in tako poišče prepisane člane. Prenastavljeni člani se nato ustrezno prikličejo.

Dvigovanje na več ravneh

Spremenimo zgornji primer tako, da vključuje večstopenjsko dedovanje.

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

Prednosti

Virtualni član ima izjave in definicije tako v osnovnem razredu kot v izvedenih razredih. Navidezni člani so ugodni, kadar so v izvedenih razredih potrebne nekatere dodatne funkcionalnosti. Služijo kot dodatki.

Pravila

  • Spremenljivke ni mogoče razglasiti za virtualno. Kot lastnosti se lahko razglasijo samo lastnosti, metode in dogodki.
  • Statičnega člana ni mogoče razglasiti za virtualnega.
  • Abstraktnega člana ni mogoče razglasiti za virtualnega.
  • Zasebnega člana ni mogoče razglasiti za virtualnega.
  • Ne-virtualnega člana ni mogoče preglasiti.
  • Raven dostopa, vrsta in ime virtualnih članov in prevladujočih članov morajo biti enaki. Na primer, če je virtualna metoda javna, mora biti prevladujoča metoda tudi javna.

Zaključek - Navidezna ključna beseda v C #

V tem članku smo razumeli koncept virtualnega v C #. Videli smo, kako C # v času izvajanja izvaja virtualno ključno besedo in si ogledali primere.

Navidezni člani so odličen koncept objektno naravnanega programiranja. Vendar pa za pridobitev poglobljenega znanja zelo priporočamo spoznavanje abstraktnih ključnih besed, vmesnikov in novih ključnih besed. To bi zelo pomagalo pri razumevanju razlike med njimi. To pomaga pri spoznanju, kdaj in kdaj ne uporabljati virtualnega.

Priporočeni članki

To je vodnik za virtualno ključno besedo v C #. Tukaj razpravljamo o tem, kako navidezno deluje v C # in kako zgoraj omenjena koda deluje z večstopenjskim dedovanjem in prednostmi. Če želite izvedeti več, si oglejte tudi naslednji članek.

  1. Kopiraj konstruktor v C #
  2. Dedovanje v C #
  3. C # funkcije
  4. C # če Izjava
  5. Če izjava v Pythonu
  6. Preobremenitev na Javi
  7. Python preobremenitev
  8. Dedovanje v PHP
  9. Celoten vodnik po dedovanju Pythona
  10. Vrste konstruktorjev v C # z izvajanjem kode