Bevezetés a C # virtuális kulcsszóba

Mi a virtuális kulcsszó? Mielőtt jobbra fordulnánk a C # nézőpontba, fontos megérteni vagy felülvizsgálni az öröklés, az elsőbbségi és a virtuális kulcsszó fogalmát az objektum-orientált programozási világban.

A módszer felülbírálása az örökléssel szorosan összekapcsolt OOP-koncepció. Ha egy gyermekosztály-módszer felülírja az azonos nevű, paraméterekkel és visszatérő típusú szülőosztály-módszert, akkor módszer-felülírónak nevezzük. A virtuális kulcsszó azt jelzi a fordítónak, hogy egy módszer felülbírálható származtatott osztályokban.

A C # szempontból a virtuális kulcsszót használjuk bármilyen tulajdonság, módszer vagy esemény deklarálásának módosítására, hogy az felülbírálható legyen egy származtatott osztályban. Egyszerűen fogalmazva, a virtuális kulcsszó a C # -ben a módszer felülbíráló koncepcióját valósítja meg.

Szintaxis

Bármely tulajdonság, módszer vagy esemény felülbírálható, ha hozzáadja a virtuális kulcsszót az alaposztályhoz, és felülírja a kulcsszót a származtatott osztályba.

Adja hozzá a virtuális kulcsszót az alaposztály deklarációhoz:

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

Adja hozzá az felülbíráló kulcsszót az alaposztály deklarációhoz:

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
)

Hogyan működik a virtuálisan C #?

A túlterhelés és a felülbírálás közötti alapvető különbség az, hogy az előbbi fordítási idő mechanizmus, míg az utóbbi futásidejű játékba kerül. A virtuális kulcsszó futás közben működik, így megvalósítva a módszer felülbíráló koncepcióját.

Bármely virtuális módszer vagy tulajdonság meghívásakor vagy elérésekor a fordító ellenőrzi a módszer vagy a tulajdonság elsődleges tagját. Ha talál, akkor meghívják. Ha egyik sem található, akkor az eredeti módszert vagy tulajdonságot hívják meg.

Kiváló kérdés merül fel - mi történik a többszintű öröklés esetén? Nos, ha bármelyik osztálytagot felülbírálják egynél több szinten, akkor a legmélyebb felülbírált tagot hívják meg (a leginkább származtatott osztály tagját).

Példa

A C # virtuális kulcsszó következő példáját az alábbiakban említjük

Egyszintű öröklés

Vegyünk egy példát egy virtuális kulcsszó működésének megértésére, amikor egyetlen gyermekosztály örökli a szülőosztályt, azaz nincs többszintű öröklés.

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

Hogyan működik a fenti kód?

A Polynomial alaposztályban két tulajdonságot és egy módszert deklaráltunk virtuálisként. Ezek már felülírhatók a gyermekórákban. Most különféle alakú gyermekcsoportokat hozunk létre, amelyek a Polinom osztályt örökölik.

A Téglalap osztályban nem szabad felülbírálnunk semmilyen tulajdonságot vagy módszert. Az alaposztály megvalósítása a téglalap osztályhoz hasonlóan működne.

A Square osztályban nincs szélességi tulajdonságunk. Tehát felülbíráljuk a hossz tulajdonságot és a Area metódust, hogy visszatérjünk a hossz négyzetére.

A Kör osztályban nincs sem hossza, sem szélessége. Tehát deklarálunk egy új osztályspecifikus sugarat, és ennek megfelelõen felülírjuk a Area módszert.

A Háromszög osztályban egyszerűen felülbíráljuk a Area módszert, és a tulajdonságokat a polinom bázis osztálytól örököljük.

Amikor a származtatott osztályok objektumait készítjük, a fordító a bázisosztály felépítése során találkozik a virtuális kulcsszóval, és így keresi a felülbírált tagokat. Ezután a felülbírált tagokat ennek megfelelően hívják fel.

Többszintű öröklés

Módosítsuk a fenti példát a többszintű öröklés beillesztésére.

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

Előnyök

A virtuális tagoknak deklarációk és definíciók vannak mind az alaposztályban, mind a származtatott osztályokban. A virtuális tagok akkor előnyösek, ha valamilyen extra funkcióra van szükség a származtatott osztályokban. Kiegészítőkként szolgálnak.

szabályok

  • A változó nem deklarálható virtuálisan. Csak tulajdonságok, módszerek és események deklarálhatók virtuálisként.
  • A statikus tagot nem lehet virtuálisnak nyilvánítani.
  • Egy absztrakt tagot nem lehet virtuálisnak nyilvánítani.
  • A magántagot nem lehet virtuálisnak nyilvánítani.
  • Egy nem virtuális tag nem felülbírálható.
  • A virtuális tagok és a felülíró tagok hozzáférési szintjének, típusának és nevének azonosnak kell lennie. Például, ha a virtuális módszer nyilvános, akkor a felülíró módszernek is nyilvánosnak kell lennie.

Következtetés - Virtuális kulcsszó a C # -ben

Ebben a cikkben megértettük a C # virtuális fogalmát. Láttuk, hogy a C # hogyan valósítja meg a virtuális kulcsszót futási idő alatt, és megnéztük a példákat.

A virtuális tagok nagyobban képezik az objektum-orientált programozást. Mélyreható ismeretek megszerzése érdekében azonban nagyon ajánlott megismerni az absztrakt kulcsszavakat, az interfészeket és az új kulcsszavakat. Ez nagyban segítené a különbség megértését közöttük. Ez segítséget nyújt abban, hogy felismerjük, mikor kell használni, és mikor nem.

Ajánlott cikkek

Ez egy útmutató a C # virtuális kulcsszóhoz. Itt tárgyaljuk, hogyan működik a virtuálisan a C #, és hogyan működik a fenti kód a többszintű örökséggel és előnyeivel. A következő cikkben további információkat is megtudhat -

  1. Másoló konstruktor a C # -ben
  2. Öröklés a C # -ben
  3. C # Funkciók
  4. C # ha nyilatkozat
  5. Ha nyilatkozat a Pythonban
  6. Túlterhelés a Java-ban
  7. Python túlterhelés
  8. Öröklés a PHP-ben
  9. Teljes útmutató az öröklésről a Pythonban
  10. A konstruktor típusai a C # kód bevezetésével

Kategória: