Въведение във виртуалната ключова дума в C #

Какво е виртуалната ключова дума? Преди да скочите право в перспектива на C #, е важно да разберете или преразгледате концепцията за наследяване, преобладаване и виртуална ключова дума в обектно-ориентирания програмен свят.

Метод Overriding е концепция OOPs, тясно свързана с Наследяването. Когато методът на дочерния клас отменя метода на родителския клас със същото име, параметри и тип връщане, той се нарича като метод за отмяна. Виртуалната ключова дума е индикация за компилатора, че метод може да бъде отменен в производни класове.

Влизайки в перспективата на C #, виртуалната ключова дума се използва за промяна на декларацията за всяко свойство, метод или събитие, за да позволи преодоляване на производен клас. Казано по-просто, виртуалната ключова дума реализира концепцията за отмяна на метода в C #.

Синтаксис

Всяко свойство, метод или събитие може да бъде отменено чрез добавяне на виртуалната ключова дума в базовия клас и отмяна на ключовата дума в производния клас.

Добавете виртуалната ключова дума в декларацията на базовия клас:

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

Добавете ключова дума за замяна в декларацията на базовия клас:

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
)

Как виртуалните работи в C #?

Основната разлика между претоварването и преодоляването е, че първата е механизъм за компилиране, докато втората влиза в игра по време на изпълнение. Виртуална ключова дума влиза в действие по време на изпълнение, като по този начин реализира концепцията за преобладаващ метод.

Когато някой виртуален метод или свойство се извиква или получава достъп, компилаторът проверява за по-висок член на метода или свойството. Ако някой бъде намерен, той се извиква. Ако не се намери, се извиква оригиналният метод или свойство.

Тук възниква отличен въпрос - какво се случва в случай на многостепенно наследяване? Е, ако който и да е член на класа се отмени на повече от едно ниво, се извиква най-дълбокият преодолян член (този в най-извлечения клас).

пример

Следният пример за виртуална ключова дума в C # е споменат по-долу

Наследяване на едно ниво

Нека вземем пример, за да разберем работата на виртуална ключова дума, когато един единствен детски клас наследява родителския клас, т.е. няма многостепенно наследяване.

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

Как работи горният код?

В базовия клас Полином сме декларирали две свойства и един метод като виртуален. Те вече могат да бъдат отменени в часовете за деца. Сега създаваме различни детски класове с различни форми, наследяващи клас полиноми.

В класа Rectangle не е необходимо да отменяме нито едно свойство или метод. Реализацията на базовия клас ще работи както е за клас Rectangle.

В клас Square нямаме свойството ширина. Така че ние отменяме свойството length и метода Area, за да върнем квадрата на дължината.

В класа Circle нито имаме дължина, нито ширина. И така, ние декларираме ново специфично за класа свойство радиус и съответно заместваме метода Area.

В класа Триъгълник ние просто отменяме метода Area и свойствата са наследени от базовия клас Полином.

Когато създаваме обекти на производни класове, компилаторът среща виртуалната ключова дума по време на изграждането на базовия клас и по този начин търси презаписаните членове. След това презаписаните членове се извикват съответно.

Наследяване на много нива

Нека модифицираме горния пример, за да включим наследяване на много нива.

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

Предимства

Виртуален член има декларации и дефиниции както в базовия клас, така и в производни класове. Виртуалните членове са изгодни, когато се изискват някои допълнителни функционалности в извлечените класове. Те служат като добавки.

правилник

  • Променлива не може да бъде обявена за виртуална. Само свойства, методи и събития могат да бъдат декларирани като виртуални.
  • Статичният член не може да бъде обявен за виртуален.
  • Абстрактният член не може да бъде обявен за виртуален.
  • Частен член не може да бъде обявен за виртуален.
  • Невиртуален член не може да бъде отменен.
  • Нивото на достъп, типът и името както на виртуалните членове, така и на преобладаващите членове трябва да бъдат еднакви. Например, ако виртуалният метод е публичен, преобладаващият метод също трябва да бъде публичен.

Заключение - Виртуална ключова дума в C #

В тази статия разбрахме концепцията за виртуално в C #. Видяхме как C # реализира виртуалната ключова дума по време на изпълнение и разгледахме примерите.

Виртуалните членове са страхотна концепция за обектно-ориентирано програмиране. Въпреки това, за да придобиете задълбочени познания, силно се препоръчва да научите за абстрактна ключова дума, интерфейси и нова ключова дума. Това би помогнало много за разбирането на разликата между всички тях. Това помага при осъзнаването кога да се използва и кога да не се използва виртуална.

Препоръчителни статии

Това е ръководство за виртуална ключова дума в C #. Тук обсъждаме как виртуалното работи в C # и как работи горният код с многостепенното наследяване и предимства. Можете също така да разгледате следната статия, за да научите повече-

  1. Копие конструктор в C #
  2. Наследяване в C #
  3. C # функции
  4. C # ако изявление
  5. Ако изявление в Python
  6. Претоварване в Java
  7. Python Overloading
  8. Наследяване в PHP
  9. Пълно ръководство за наследяване в Python
  10. Видове конструктор в C # с изпълнение на код