Johdatus virtuaaliseen avainsanaan C #: ssä

Mikä on virtuaalinen avainsana? Ennen kuin hyppäät oikein C # -perspektiiviin, on tärkeää ymmärtää tai tarkistaa perimisen, ohittavan ja virtuaalisen avainsanan käsitettä oliokeskeisessä ohjelmointimaailmassa.

Menetelmän ohittaminen on OOP-käsite, joka liittyy läheisesti perintöön. Kun lapsiluokan menetelmä ohittaa saman nimen, parametrien ja paluutyypin vanhemman luokan menetelmän, sitä kutsutaan menetelmän ohittamiseksi. Virtuaali avainsana on osoitus kääntäjälle siitä, että menetelmä voidaan ohittaa johdettuissa luokissa.

C # -perspektiivistä tultaessa virtuaalista avainsanaa käytetään modifioimaan minkä tahansa ominaisuuden, menetelmän tai tapahtuman ilmoitusta johdetun luokan ohittamisen mahdollistamiseksi. Yksinkertaisesti sanottuna virtuaalinen avainsana toteuttaa menetelmän ohittavan käsitteen C #: ssä.

Syntaksi

Mikä tahansa ominaisuus, menetelmä tai tapahtuma voidaan ohittaa lisäämällä virtuaalinen avainsana perusluokkaan ja ohittamalla avainsana johdettuun luokkaan.

Lisää virtuaalinen avainsana perusluokan ilmoitukseen:

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

Lisää ohitusavainsana perusluokan ilmoitukseen:

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
)

Kuinka virtuaali toimii C #: ssä?

Aivan perimmäinen ero ylikuormituksen ja ohittamisen välillä on, että edellinen on kääntämisaikamekanismi, kun taas jälkimmäinen tulee peliin ajon aikana. Virtuaali avainsana tulee toimintaan suorituksen aikana, toteuttaen siten menetelmän ohittavan konseptin.

Kun jotakin virtuaalista menetelmää tai ominaisuutta käytetään tai niihin päästään, kääntäjä tarkistaa menetelmän tai ominaisuuden ensisijaisen jäsenen. Jos yksi löytyy, siihen vedotaan. Jos mitään ei löydy, alkuperäiseen menetelmään tai omaisuuteen vedota.

Esiin nousee erinomainen kysymys - mitä tapahtuu monitasoiselle perinnölle? No, jos joku luokan jäsen korostetaan useammalla kuin yhdellä tasolla, kutsutaan syvimmälle ohitetulle jäsenelle (jäsen johdetuimmassa luokassa).

esimerkki

Seuraava esimerkki C # -sivun avainsanasta mainitaan alla

Yhden tason perintö

Otetaan esimerkki virtuaalisen avainsanan toimivuuden ymmärtämiseksi, kun yksi lasten luokka perii vanhempien luokan eli ei ole monitasoista perintöä.

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

Kuinka yllä oleva koodi toimii?

Perusluokassa Polynomial olemme julistaneet kaksi ominaisuutta ja yhden menetelmän virtuaalisiksi. Ne voidaan nyt ohittaa lastenluokissa. Nyt luomme erilaisia ​​lapsimuokkia, joiden muoto on perinne, joka perii polynomi-luokan.

Suorakulma-luokassa meidän ei tarvitse ohittaa mitään ominaisuutta tai menetelmää. Perusluokan toteutus toimisi sellaisenaan suorakulmion luokalle.

Square-luokassa meillä ei ole leveysominaisuutta. Joten ohitamme pituusominaisuuden ja Area-menetelmän palauttaaksesi pituuden neliön.

Circle-luokassa meillä ei ole pituutta tai leveyttä. Joten julistamme uuden luokkakohtaisen sädeominaisuuden ja ohitamme vastaavasti Area-menetelmän.

Kolmioluokassa ohitamme yksinkertaisesti Area-menetelmän, ja ominaisuudet ovat peritty perusluokan Polynomialta.

Kun luomme johdettujen luokkien objekteja, kääntäjä kohtaa virtuaalisen avainsanan kantaluokan rakentamisen aikana ja etsii siten korvattuja jäseniä. Sitten ohitettuihin jäseniin vedotaan vastaavasti.

Monitasoinen perintö

Olkaamme muokata yllä olevaa esimerkkiä sisällyttämään monitasoinen perintö.

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

edut

Virtuaalisella jäsenellä on ilmoitukset ja määritelmät sekä perusluokassa että johdettuissa luokissa. Virtuaaliset jäsenet ovat edullisia, kun johdettuihin luokkiin vaaditaan joitain lisätoimintoja. Ne toimivat lisäosina.

säännöt

  • Muuttujaa ei voida julistaa virtuaaliseksi. Vain ominaisuudet, menetelmät ja tapahtumat voidaan julistaa virtuaalisiksi.
  • Staattista jäsentä ei voida julistaa virtuaaliseksi.
  • Abstraktia jäsentä ei voida julistaa virtuaaliseksi.
  • Yksityistä jäsentä ei voida julistaa virtuaaliseksi.
  • Ei-virtuaalista jäsentä ei voida ohittaa.
  • Sekä virtuaalisten jäsenten että ohittavien jäsenten käyttöoikeustason, tyypin ja nimen on oltava samat. Esimerkiksi, jos virtuaalinen menetelmä on julkinen, myös ohittavan menetelmän on oltava julkinen.

Johtopäätös - virtuaalinen avainsana C #: ssä

Tässä artikkelissa ymmärsimme virtuaalin käsitteen C #: ssä. Näimme kuinka C # toteuttaa virtuaalisen avainsanan ajon aikana ja katsoimme esimerkkejä.

Virtuaaliset jäsenet ovat hieno käsitys olio-ohjelmoinnista. Perusteellisen tiedon saamiseksi on kuitenkin erittäin suositeltavaa oppia abstraktista avainsanasta, käyttöliittymistä ja uudesta avainsanasta. Tämä auttaisi suuresti ymmärtämään eroa kaikkien välillä. Tämä auttaa ymmärtämään, milloin virtuaalista käytetään ja milloin ei.

Suositellut artikkelit

Tämä on opas virtuaaliseen avainsanaan C #: ssä. Tässä keskustellaan kuinka virtuaali toimii C #: ssä ja kuinka yllä oleva koodi toimii monitasoisen perinnön ja etujen kanssa. Voit myös tarkastella seuraavaa artikkelia saadaksesi lisätietoja-

  1. Kopioi rakentaja C #: ssä
  2. Perintö C #: ssä
  3. C # toiminnot
  4. C # jos lausunto
  5. Jos lausunto Pythonissa
  6. Ylikuormitus Java-sovelluksessa
  7. Pythonin ylikuormitus
  8. Perintö PHP: llä
  9. Täydellinen opas perinnöstä Pythonissa
  10. C #: n konstruktorityypit koodin toteutuksella