C-virtuaalse märksõna sissejuhatus

Mis on virtuaalne märksõna? Enne paremale C # vaatenurka hüppamist on oluline pärandi mõiste, ülimusliku ja virtuaalse märksõna mõiste objektorienteeritud programmeerimismaailmas aru saada või seda üle vaadata.

Meetodi alistamine on OOP-ide kontseptsioon, mis on tihedalt seotud pärandiga. Kui lasteklassi meetod alistab sama nime, parameetrite ja tagastamise tüübi vanema klassi meetodi, nimetatakse seda meetodi ülimuslikuks. Virtuaalne märksõna on märk kompilaatorile, et tuletatud klassides võib mõne meetodi alistada.

C # vaatenurgast tulles kasutatakse virtuaalset märksõna mis tahes omaduse, meetodi või sündmuse deklaratsiooni modifitseerimiseks, et võimaldada tuletatud klassis alistada. Lihtsamalt öeldes rakendab virtuaalne märksõna C #-s meetodi ülimuslikkuse.

Süntaks

Mis tahes atribuuti, meetodit või sündmust saab alistada, lisades virtuaalse märksõna põhiklassi ja alistada märksõna tuletatud klassis.

Lisage põhiklassideklaratsiooni virtuaalne märksõna:

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

Lisage põhiklassideklaratsiooni alistatud märksõna:

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
)

Kuidas virtuaalne töötab C # -s?

Põhiline erinevus ülekoormamise ja alistamise vahel on see, et esimene on kompileerimise aja mehhanism, teine ​​aga mängu ajal. Virtuaalne märksõna käivitub käitusel, rakendades seega meetodi ülimuslikkust.

Mõnele virtuaalsele meetodile või atribuudile pöördumisel või sellele juurdepääsu saamiseks kontrollib kompilaator meetodi või atribuudi ülekaalukaid liikmeid. Kui üks leitakse, kutsutakse see välja. Kui ühtegi neist ei leita, siis tuginetakse algsele meetodile või atribuudile.

Siit tõusetub suurepärane küsimus - mis juhtub mitmetasandilise päranduse korral? Noh, kui mõnda klassi liiget alistatakse rohkem kui ühel tasemel, kutsutakse välja sügavaim ülehinnatud liige (see, mis on kõige tuletatud klassis).

Näide

Järgnevat näidet C-virtuaalsest märksõnast on mainitud allpool

Ühetasandiline pärand

Võtame näite virtuaalse märksõna toimimise mõistmiseks, kui üks lasteklass pärib vanemklassi, st mitmetasandiline pärand puudub.

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

Kuidas ülaltoodud kood töötab?

Alusklassis Polynomial oleme kuulutanud virtuaalseks kaks omadust ja ühe meetodi. Nüüd saab need lastetundides mööda vaadata. Nüüd loome mitmesuguseid erineva kujuga lasteklasse, pärides polünoomi klassi.

Ristkülikuklassis ei pea me ühtegi omadust ega meetodit alistama. Põhiklassi teostus toimiks ristküliku klassi puhul praegusel kujul.

Square klassis meil laiuse omadust pole. Seega alistame pikkuse atribuudi ja pindala meetodi pikkuse ruudu tagastamiseks.

Circle klassis pole meil ei pikkust ega laiust. Niisiis, kuulutame uue klassispetsiifilise raadiuse omaduse ja alistame vastavalt Area-meetodi.

Kolmnurga klassis alistame lihtsalt pindala meetodi ja omadused päritakse põhiklassi polünoomilt.

Kui loome tuletatud klasside objekte, kohtub kompilaator põhiklassi loomise käigus virtuaalse märksõnaga ja otsib seega ülepakutud liikmeid. Seejärel kutsutakse ülepakutud liikmetele vastavalt.

Mitmetasandiline pärimine

Muutkem ülaltoodud näidet mitmetasandilise pärandi lisamiseks.

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

Eelised

Virtuaalsel liikmel on deklaratsioonid ja määratlused nii põhiklassis kui ka tuletatud klassides. Virtuaalsed liikmed on eelised, kui tuletatud klassides on vaja täiendavaid funktsioone. Need toimivad lisandmoodulitena.

Reeglid

  • Muutujat ei saa virtuaalseks kuulutada. Ainult atribuute, meetodeid ja sündmusi saab virtuaalseteks kuulutada.
  • Staatilist liiget ei saa kuulutada virtuaalseks.
  • Abstraktset liiget ei saa kuulutada virtuaalseks.
  • Eraliiget ei saa virtuaalseks kuulutada.
  • Mitte-virtuaalset liiget ei saa tühistada.
  • Nii virtuaalsete kui ka ülekaalukate liikmete juurdepääsu tase, tüüp ja nimi peavad olema samad. Näiteks kui virtuaalne meetod on avalik, peab ka ülimuslik meetod olema avalik.

Järeldus - virtuaalne märksõna C # -s

Selles artiklis mõistsime C # virtuaalse mõiste mõistet. Nägime, kuidas C # rakendab käitustöö ajal virtuaalset märksõna, ja vaatasime näiteid.

Virtuaalsed liikmed on suurepärane objektorienteeritud programmeerimise kontseptsioon. Põhjalike teadmiste saamiseks on siiski soovitatav õppida tundma abstraktset märksõna, liideseid ja uut märksõna. See aitaks suuresti mõista nende kõigi erinevust. See aitab mõista, millal virtuaalset kasutada ja millal mitte.

Soovitatavad artiklid

See on juhend virtuaalse märksõna kasutamiseks C # -s. Siin räägime sellest, kuidas virtuaalne C-kood töötab ja kuidas ülaltoodud kood mitmetasandilise pärandi ja eelistega töötab. Lisateabe saamiseks võite vaadata ka järgmist artiklit -

  1. Kopeeri konstruktor C # -s
  2. Pärand C # -s
  3. C # funktsioonid
  4. C # kui avaldus
  5. Kui avaldus Pythonis
  6. Ülekoormus Java-s
  7. Pythoni ülekoormamine
  8. Pärand PHP-s
  9. Pythoni pärandi täielik juhend
  10. C # konstruktori tüübid koos koodirakendusega

Kategooria: