Introducere în cuvântul cheie virtual în C #

Ce este cuvântul cheie virtual? Înainte de a sări direct în perspectiva C #, este important să înțelegeți sau să revizuiți conceptul de moștenire, cuvânt cheie principal și virtual în lumea programării orientate pe obiecte.

Metoda Suprascriere este un concept OOPs strâns legat de Moștenire. Atunci când o metodă de clasă copil înlocuiește metoda clasei părinte cu același nume, parametri și tip de retur, aceasta este denumită metodă de suprasolicitare. Un cuvânt cheie virtual este o indicație pentru compilator că o metodă poate fi ignorată în clase derivate.

Venind în perspectiva C #, cuvântul cheie virtual este utilizat pentru a modifica declarația oricărei proprietăți, metode sau evenimente pentru a permite suprasolicitarea într-o clasă derivată. În termeni simpli, cuvântul cheie virtual pune în aplicare metoda care precede conceptul în C #.

Sintaxă

Orice proprietate, metodă sau eveniment poate fi anulată prin adăugarea cuvântului cheie virtual în clasa de bază și anularea cuvântului cheie în clasa derivată.

Adăugați cuvântul cheie virtual în declarația clasei de bază:

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

Adăugați cuvântul cheie de înlocuire în declarația clasei de bază:

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
)

Cum funcționează virtualul în C #?

Diferența de bază între supraîncărcare și supraîncărcare este că primul este un mecanism de compilare a timpului, în timp ce cel de-al doilea intră în joc la timpul de rulare. Un cuvânt cheie virtual intră în acțiune la timpul de execuție, punând astfel în aplicare metoda conceptului de supraveghere.

Când orice metodă virtuală sau proprietate este invocată sau accesată, compilatorul verifică un membru important al metodei sau proprietății. Dacă se găsește unul, acesta este invocat. Dacă nu este găsit, metoda sau proprietatea originală sunt invocate.

Aici apare o întrebare excelentă - ce se întâmplă în cazul moștenirii pe mai multe niveluri? Ei bine, dacă orice membru al clasei este anulat în mai mult de un nivel, este invocat cel mai adânc membru suprasolicitat (cel din clasa cea mai derivată).

Exemplu

Următorul exemplu de cuvânt cheie virtuală în C # este menționat mai jos

Moștenire la un nivel

Să luăm un exemplu pentru a înțelege funcționarea unui cuvânt cheie virtual atunci când o clasă copil unică moștenește clasa părinte, adică nu există moștenire pe mai multe niveluri.

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

Cum funcționează codul de mai sus?

În clasa de bază Polinomial, am declarat două proprietăți și o metodă ca virtuale. Acestea pot fi anulate acum la orele de copii. Acum creăm diverse clase de copii de diferite forme care moștenesc clasa Polinomială.

În clasa Rectangle, nu trebuie să înlocuim nicio proprietate sau metodă. Implementarea clasei de bază ar funcționa așa cum este pentru clasa Rectangle.

În clasa Square nu avem proprietatea lățimii. Așa că anulăm proprietatea lungime și metoda Area pentru a returna pătratul lungimii.

În clasa Cerc, nu avem nici lungimea, nici lățimea. Deci, declaram o nouă proprietate specifică clasei de rază și înlocuim în mod corespunzător metoda Area.

În clasa Triangle, pur și simplu anulăm metoda Area și proprietățile sunt moștenite de la clasa de bază Polinomial.

Când creăm obiecte din clasele derivate, compilatorul întâlnește cuvântul cheie virtual în timpul construcției clasei de bază și caută astfel membrii suprasolicitați. Membrii suprasolicitați sunt invocați în consecință.

Moștenire pe mai multe niveluri

Să modificăm exemplul de mai sus pentru a include moștenirea pe mai multe niveluri.

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

avantaje

Un membru virtual are declarații și definiții atât în ​​clasa de bază, cât și în clasele derivate. Membrii virtuali sunt avantajoși atunci când anumite funcționalități suplimentare sunt necesare în clasele derivate. Ele servesc ca suplimente.

reguli

  • O variabilă nu poate fi declarată virtuală. Doar proprietățile, metodele și evenimentele pot fi declarate virtuale.
  • Un membru static nu poate fi declarat virtual.
  • Un membru abstract nu poate fi declarat virtual.
  • Un membru privat nu poate fi declarat virtual.
  • Un membru non-virtual nu poate fi anulat.
  • Nivelul de acces, tipul și denumirea atât a membrilor virtuali, cât și a membrilor superiori trebuie să fie identici. De exemplu, dacă metoda virtuală este publică, metoda de supraîncărcare trebuie să fie publică.

Concluzie - Cuvânt cheie virtual în C #

În acest articol, am înțeles conceptul de virtual în C #. Am văzut cum C # implementează cuvântul cheie virtual în timpul rulării și ne-am uitat la exemple.

Membrii virtuali sunt un concept excelent al programării orientate pe obiecte. Cu toate acestea, pentru a obține cunoștințe aprofundate, este foarte recomandat să aflați despre cuvintele cheie abstracte, interfețele și noul cuvânt cheie. Acest lucru ar ajuta foarte mult la înțelegerea diferenței dintre toți. Acest lucru ajută la realizarea când să folosești și când nu să folosești virtual.

Articole recomandate

Acesta este un ghid pentru cuvântul cheie virtual în C #. Aici vom discuta despre modul în care funcționează virtualul în C # și cum funcționează codul de mai sus cu moștenirea și avantajele pe mai multe niveluri. De asemenea, puteți consulta articolul următor pentru a afla mai multe-

  1. Copiază constructor în C #
  2. Moștenire în C #
  3. C # Funcții
  4. C # dacă declarație
  5. Dacă declarația în Python
  6. Supraîncărcare în Java
  7. Supraîncărcarea Python
  8. Moștenire în PHP
  9. Ghid complet de moștenire din Python
  10. Tipuri de constructor în C # cu implementarea codului