Introduktion til virtuelt nøgleord i C #

Hvad er det virtuelle nøgleord? Før du hopper lige ind i C # -perspektiv, er det vigtigt at forstå eller revidere konceptet om arv, altoverskyggende og virtuelt nøgleord i den objektorienterede programmeringsverden.

Method Overriding er et OOPs-koncept, der er tæt sammenkrævet med arv. Når en barneklasse-metode tilsidesætter forældreklasse-metoden med samme navn, parametre og returtype, betegnes den som metodeoverskridende. Et virtuelt nøgleord er en indikation for kompilatoren om, at en metode kan tilsidesættes i afledte klasser.

Når det kommer til C # -perspektivet, bruges det virtuelle nøgleord til at ændre erklæringen for enhver egenskab, metode eller begivenhed for at tillade tilsidesættelse i en afledt klasse. Kort sagt implementerer det virtuelle nøgleord den metode, der tvinges ud over metoden i C #.

Syntaks

Enhver egenskab, metode eller begivenhed kan tilsidesættes ved at tilføje det virtuelle nøgleord i baseklassen og tilsidesætte søgeord i den afledte klasse.

Tilføj det virtuelle nøgleord i basisklasseerklæringen:

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

Tilføj det tilsidesatte søgeord i basisklasseerklæringen:

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
)

Hvordan virtuelt fungerer i C #?

Den meget grundlæggende forskel mellem overbelastning og tilsidesættelse er, at førstnævnte er en kompileringstidsmekanisme, mens sidstnævnte kommer i spil på kørselstidspunktet. Et virtuelt nøgleord træder i funktion ved kørsel og implementerer dermed metoden, som er overordnet koncept.

Når en hvilken som helst virtuel metode eller egenskab påberåbes eller åbnes, tjekker compileren for et altoverskyggende medlem af metoden eller egenskaben. Hvis man finder det, påkaldes det. Hvis der ikke findes nogen, påberåbes den originale metode eller egenskab.

Her opstår et fremragende spørgsmål - hvad sker der i tilfælde af arv på flere niveauer? Nå, hvis et klassemedlem overstyres på mere end et niveau, påberåbes det dybeste overstyrede medlem (det i den mest afledte klasse).

Eksempel

Følgende eksempel på Virtuel nøgleord i C # nævnes nedenfor

Arv på enkelt niveau

Lad os tage et eksempel for at forstå, hvordan et virtuelt nøgleord fungerer, når en enkelt barneklasse arver forældreklassen, dvs. der er ingen arve på flere niveauer.

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

Hvordan fungerer ovenstående kode?

I baseklassen Polynomial har vi erklæret to egenskaber og en metode som virtuel. Disse kan nu tilsidesættes i børneklasser. Nu skaber vi forskellige børneklasser af forskellige former, der arver Polynomklassen.

I rektangelklassen behøver vi ikke tilsidesætte en egenskab eller metode. Basisklasseimplementeringen fungerer som den er for rektangelklassen.

I Square-klassen har vi ikke breddeegenskapen. Så vi tilsidesætter længdeegenskaben og Areal-metoden for at returnere kvadratet med længden.

I Circle-klassen har vi hverken længde eller bredde. Så vi erklærer en ny klassespecifik egenskab med radius og tilsidesætter Area-metoden i overensstemmelse hermed.

I trekantklassen tilsidesætter vi simpelthen Area-metoden, og egenskaberne er arvet fra basisklassen Polynomial.

Når vi opretter objekter af de afledte klasser, møder kompilatoren det virtuelle nøgleord under konstruktionen af ​​baseklassen og ser således efter de tilsidesatte medlemmer. De tilsidesatte medlemmer kaldes derefter i overensstemmelse hermed.

Erfarenhed på flere niveauer

Lad os ændre ovenstående eksempel til at omfatte arv på flere niveauer.

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

Fordele

Et virtuelt medlem har erklæringer og definitioner i både baseklassen og afledte klasser. Virtuelle medlemmer er fordelagtige, når der kræves nogle ekstra funktionaliteter i de afledte klasser. De fungerer som tilføjelser.

Regler

  • En variabel kan ikke erklæres virtuel. Kun egenskaber, metoder og begivenheder kan erklæres som virtuelle.
  • Et statisk medlem kan ikke erklæres virtuelt.
  • Et abstrakt medlem kan ikke erklæres virtuelt.
  • Et privat medlem kan ikke erklæres virtuelt.
  • Et ikke-virtuelt medlem kan ikke tilsidesættes.
  • Adgangsniveau, type og navn på både virtuelle medlemmer og de overordnede medlemmer skal være det samme. For eksempel, hvis den virtuelle metode er offentlig, skal overstyrende metode også være offentlig.

Konklusion - Virtuelt nøgleord i C #

I denne artikel forstod vi begrebet virtuel i C #. Vi så, hvordan C # implementerer det virtuelle nøgleord under runtime og kiggede på eksemplerne.

Virtuelle medlemmer er et fantastisk koncept med objektorienteret programmering. For at få indgående viden anbefales det stærkt at lære om abstrakte søgeord, grænseflader og nyt søgeord. Dette ville meget hjælpe med at forstå forskellen mellem dem alle. Dette hjælper med at indse, hvornår man skal bruge, og hvornår man ikke skal bruge virtuel.

Anbefalede artikler

Dette er en guide til Virtuel nøgleord i C #. Her diskuterer vi, hvordan virtuelt fungerer i C #, og hvordan fungerer ovenstående kode med flerniveau-arv og fordele. Du kan også se på den følgende artikel for at lære mere-

  1. Kopiér konstruktør i C #
  2. Arv i C #
  3. C # Funktioner
  4. C # hvis erklæring
  5. Hvis erklæring i Python
  6. Overbelastning i Java
  7. Python-overbelastning
  8. Arv i PHP
  9. Komplet guide til arv i Python
  10. Konstruktortyper i C # med kodeimplementering

Kategori: