Introduksjon til virtuelt nøkkelord i C #

Hva er det virtuelle nøkkelordet? Før du hopper rett inn i C # -perspektiv, er det viktig å forstå eller revidere begrepet arv, overordnet og virtuelt nøkkelord i den objektorienterte programmeringsverdenen.

Method Overriding er et OOPs konsept tett strengt med arv. Når en barneklasse-metode overstyrer foreldreklasse-metoden med samme navn, parametere og returtype, blir den betegnet som metoden overstyring. Et virtuelt nøkkelord er en indikasjon for kompilatoren om at en metode kan overstyres i avledede klasser.

Når det kommer til C # -perspektivet, brukes det virtuelle nøkkelordet til å endre erklæringen om enhver eiendom, metode eller hendelse for å tillate overstyring i en avledet klasse. Enkelt sagt implementerer det virtuelle nøkkelordet metoden overstyrende konseptet i C #.

syntax

Enhver eiendom, metode eller hendelse kan overstyres ved å legge til det virtuelle nøkkelordet i baseklassen og overstyre nøkkelordet i den avledede klassen.

Legg til det virtuelle nøkkelordet i grunnklasseerklæringen:

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

Legg til overstyringsnøkkelordet i grunnklasseerklæ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 helt grunnleggende forskjellen mellom overbelastning og overstyring er at førstnevnte er en kompilertidsmekanisme, mens sistnevnte kommer i spill ved kjøretid. Et virtuelt nøkkelord trer i verk ved kjøretid, og implementerer dermed metoden overordnet konsept.

Når en hvilken som helst virtuell metode eller eiendom blir påkalt eller tilgang, sjekker kompilatoren etter et overordnet medlem av metoden eller eiendommen. Hvis man blir funnet, blir det påberopt. Hvis ingen blir funnet, blir den opprinnelige metoden eller egenskapen påberopt.

Her oppstår et utmerket spørsmål - hva skjer i tilfelle arv fra flere plan? Vel, hvis noe klassemedlem overstyres på mer enn ett nivå, påkalles det dypeste overstyrte medlemmet (det i den mest avledede klassen).

Eksempel

Følgende eksempel på virtuelt nøkkelord i C # nevnes nedenfor

Arv på ett nivå

La oss ta et eksempel for å forstå bruken av et virtuelt nøkkelord når en enkelt barneklasse arver foreldreklassen, dvs. at det ikke er arv på flere nivåer.

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 koden over?

I grunnklassen Polynomial har vi erklært to egenskaper og en metode som virtuell. Disse kan nå overstyres i barneklasser. Nå lager vi forskjellige barneklasser av forskjellige former som arver Polynomklassen.

I rektangelklassen trenger vi ikke å overstyre noen eiendom eller metode. Grunnklasseimplementeringen vil fungere som den er for Rectangle-klassen.

I Square-klassen har vi ikke breddeegenskapen. Så vi overstyrer lengdeegenskapen og metoden Areal for å returnere kvadratet med lengden.

I Circle-klassen har vi verken lengde eller bredde. Så vi erklærer en ny klassespesifikk egenskap med radius og overstyrer Area-metoden deretter.

I trekantklassen overstyrer vi ganske enkelt Area-metoden, og egenskapene arves fra grunnklassen Polynomial.

Når vi oppretter objekter av de avledede klassene, møter kompilatoren det virtuelle nøkkelordet under baseklasse-konstruksjonen og leter dermed etter de overstyrte medlemmene. De overstyrte medlemmene blir deretter påberopt deretter.

Flere nivåer arv

La oss endre eksemplet ovenfor for å inkludere arvelighet på flere nivåer.

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

Fordeler

Et virtuelt medlem har erklæringer og definisjoner i både baseklasse og avledede klasser. Virtuelle medlemmer er fordelaktige når det kreves noen ekstra funksjonaliteter i de avledede klassene. De fungerer som tillegg.

regler

  • En variabel kan ikke erklæres virtuell. Bare egenskaper, metoder og hendelser kan deklareres som virtuelle.
  • Et statisk medlem kan ikke erklæres virtuelt.
  • Et abstrakt medlem kan ikke erklæres virtuell.
  • Et privat medlem kan ikke erklæres virtuell.
  • Et ikke-virtuelt medlem kan ikke overstyres.
  • Tilgangsnivået, typen og navnet på både virtuelle medlemmer og de overordnede medlemmene må være det samme. For eksempel, hvis den virtuelle metoden er offentlig, må den overordnede metoden også være offentlig.

Konklusjon - Virtuelt nøkkelord i C #

I denne artikkelen forsto vi konseptet virtuell i C #. Vi så hvordan C # implementerer det virtuelle nøkkelordet under løpetid og så på eksemplene.

Virtuelle medlemmer er et flott konsept for objektorientert programmering. For å få inngående kunnskap, anbefales det imidlertid å lære om abstrakte søkeord, grensesnitt og nytt nøkkelord. Dette vil hjelpe til med å forstå forskjellen mellom dem alle. Dette hjelper deg med å innse når du skal bruke og når du ikke skal bruke virtuell.

Anbefalte artikler

Dette er en guide til virtuelt nøkkelord i C #. Her diskuterer vi hvordan virtuelt fungerer i C # og hvordan fungerer overkoden med flernivåarv og fordeler. Du kan også se på følgende artikkel for å lære mer-

  1. Copy Constructor i C #
  2. Arv i C #
  3. C # Funksjoner
  4. C # hvis uttalelse
  5. Hvis uttalelse i Python
  6. Overbelastning i Java
  7. Python-overbelastning
  8. Arv i PHP
  9. Komplett guide til arv i Python
  10. Typer konstruktør i C # med kodeimplementering