Uvod u virtualnu ključnu riječ u C #

Što je virtualna ključna riječ? Prije skoka pravo u C # perspektivu, važno je razumjeti ili revidirati koncept nasljeđivanja, prevladavanja i virtualne ključne riječi u objektno orijentiranom programskom svijetu.

Prevladavanje metode je koncept OOP-a usko povezan s Nasljeđivanjem. Kad nadređena metoda klase nadjača nadređenu metodu istog naziva, parametara i vrste povratka, to se naziva preglasavanjem metode. Virtualna ključna riječ je pokazatelju prevoditelju da metoda može biti nadjačana u izvedenim klasama.

Dolazeći u C # perspektivu, virtualna ključna riječ koristi se za izmjenu deklaracije bilo kojeg svojstva, metode ili događaja kako bi se omogućilo prevladavanje u izvedenom razredu. Jednostavno rečeno, virtualna ključna riječ implementira koncept nadjačavanja metode u C #.

Sintaksa

Svako svojstvo, metoda ili događaj može se nadjačati dodavanjem virtualne ključne riječi u osnovnu klasu i preglasom ključne riječi u izvedenom razredu.

Dodajte virtualnu ključnu riječ u deklaraciju osnovne klase:

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

Dodajte ključnu riječ preglas u deklaraciju osnovne klase:

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 virtualni djeluju u C #?

Osnovna razlika između preopterećenja i prejedanja je ta što je prvi mehanizam-vrijeme sažimanja, dok drugi dolazi u igru ​​u vrijeme izvođenja. Virtualna ključna riječ stupa na snagu u vrijeme izvođenja, na taj način implementirajući koncept prevladavanja metode.

Kad se bilo koja virtualna metoda ili svojstvo poziva ili pristupi, prevodilac provjerava ima li prevladavajući član metode ili svojstvo. Ako se pronađe, poziva se. Ako nije pronađen nijedan, poziva se izvorna metoda ili svojstvo.

Ovdje se postavlja izvrsno pitanje - što se događa u slučaju višeslojnog nasljeđivanja? Pa, ako je bilo koji član klase nadjačan na više razina, poziva se najdublji prebrisani član (onaj u klasi koja se najviše nalazi).

Primjer

Sljedeći primjer virtualne ključne riječi u C # spominje se u nastavku

Nasljeđivanje na jednom nivou

Uzmimo primjer da bismo razumjeli funkcioniranje virtualne ključne riječi kada jedna podređena klasa nasljeđuje roditeljsku klasu, tj. Nema višerazinskog nasljeđivanja.

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 djeluje gornji kôd?

U polinom osnovne baze proglasili smo dva svojstva i jednu metodu kao virtualnu. To se sada može poništiti u razredima djece. Sada stvaramo različite razrede djece različitih oblika nasljeđujući klasu Polinom.

U klasi Rectangle ne moramo prevladavati nijedno svojstvo ili metodu. Implementacija osnovne klase funkcionirala bi kao da je klasa Rectangle.

U klasi Square nemamo svojstvo širine. Dakle, mi nadjačavamo svojstvo duljine i metoda Area kako bismo vratili kvadrat duljine.

U klasi Circle nemamo ni duljinu ni širinu. Dakle, izjavljujemo novo svojstvo radijusa specifično za klasu i nadjačavamo metodu Area u skladu s tim.

U klasi Triangle jednostavno nadglašujemo metodu Area i svojstva su naslijeđena iz polinom osnovne klase.

Kad stvaramo objekte izvedenih klasa, prevodilac nailazi na virtualnu ključnu riječ tijekom konstrukcije osnovne klase i tako traži zavađene članove. Prevaziđeni članovi se zatim pozivaju u skladu s tim.

Nasljeđivanje na više razina

Promijenimo gornji primjer kako bismo uključili višeslojno nasljeđivanje.

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 deklaracije i definicije i u osnovnoj i u izvedenim klasama. Virtualni su članovi povoljni kada su u izvedenim klasama potrebne neke dodatne funkcionalnosti. Služe kao dodaci.

pravila

  • Promjenjiva se ne može proglasiti virtualnom. Samo svojstva, metode i događaji mogu se proglasiti virtualnim.
  • Statički član ne može se proglasiti virtualnim.
  • Apstraktni član ne može se proglasiti virtualnim.
  • Privatni član ne može biti proglašen virtualnim.
  • Ne-virtualni član ne može se nadjačati.
  • Razina pristupa, vrsta i ime virtualnih članova i prevladavajućih članova moraju biti isti. Na primjer, ako je virtualna metoda javna, metoda prevladavanja također mora biti javna.

Zaključak - Virtualna ključna riječ u C #

U ovom smo članku razumjeli koncept virtualnog u C #. Vidjeli smo kako C # implementira virtualnu ključnu riječ za vrijeme izvođenja i pogledali smo primjere.

Virtualni članovi izvrstan su koncept objektno orijentiranog programiranja. No, za stjecanje detaljnijeg znanja, visoko se preporučuje učenje o apstraktnim ključnim riječima, sučeljima i novim ključnim riječima. To bi uvelike pomoglo u razumijevanju razlike između svih njih. To pomaže u shvaćanju kada koristiti, a kada ne koristiti virtualno.

Preporučeni članci

Ovo je vodič za virtualnu ključnu riječ na C #. Ovdje smo raspravljali o tome kako virtualno djeluje u C # i kako gore navedeni kod djeluje s nasljeđivanjem i prednostima na više razina. Možete pogledati i sljedeći članak kako biste saznali više -

  1. Kopiraj konstruktor u C #
  2. Nasljeđivanje u C #
  3. C # funkcije
  4. C # ako Izjava
  5. Ako Izjava u Pythonu
  6. Preopterećenje u Javi
  7. Python preopterećenje
  8. Nasljeđivanje u PHP-u
  9. Kompletan vodič za nasljeđivanje Pythona
  10. Vrste konstruktora u C # s implementacijom koda

Kategorija: