Увод у виртуелну кључну реч у Ц #

Шта је виртуелна кључна реч? Пре скока право у перспективу Ц #, важно је разумети или ревидирати концепт наслеђивања, превладавања и виртуелне кључне речи у објектно оријентисаном програмском свету.

Пребрзавање метода је концепт ООП-а уско повезан с насљеђивањем. Када метода надређене класе надјача истоимени назив, параметре и тип повратне класе, она се назива прегласавањем методе. Виртуална кључна реч је показатељу преводиоцу да метода може бити надјачана у изведеним класама.

Долазећи у Ц # перспективу, виртуелна кључна реч користи се за модификацију декларације било којег својства, метода или догађаја како би се омогућило прегласавање у изведеној класи. Једноставно речено, виртуелна кључна реч имплементира концепт прегласавања метода у Ц #.

Синтакса

Било које својство, метод или догађај може се надјачати додавањем виртуелне кључне речи у основну класу и прегласавања кључне речи у изведеној класи.

Додајте виртуелну кључну реч у декларацију основне класе:

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
)

Како виртуелно функционише у Ц #?

Основна разлика између преоптерећења и прегласавања је у томе што је први механизам за компајлирање, а други за време извођења. Виртуелна кључна реч ступа на снагу током извођења, чиме се примењује концепт превладавања метода.

Када се било којој виртуелној методи или својству прикаже или јој се приступи, преводилац провјерава има ли превладавајући члан методе или својство. Ако је пронађена, позива се. Ако није пронађен ниједан, позива се оригинална метода или својство.

Овде се поставља одлично питање - шта се дешава у случају наслеђивања на више нивоа? Па, ако је било који члан класе прегласан на више нивоа, позива се најдубљи прекривени члан (онај у класи која се највише налази).

Пример

Следећи пример виртуалне кључне речи у Ц # поменут је у наставку

Наслеђивање на једном нивоу

Узмимо пример да бисмо разумели функционисање виртуелне кључне речи када једна дечија класа наслеђује родитељску класу, тј. Нема наслеђивања на више нивоа.

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

Како дјелује горњи код?

У базној класи Полином смо прогласили две особине и једну методу као виртуелну. Они се сада могу прегласити у дечјим часовима. Сада стварамо различите дечије класе различитих облика наслеђујући полиномску класу.

У класи Рецтангле, не морамо прегласавати ниједно својство или методу. Имплементација основне класе функционирала би као да је класа Рецтангле.

У класи Скуаре немамо својство ширине. Дакле, надјачавамо својство дужине и метода Ареа како бисмо вратили квадрат дужине.

У класи Цирцле немамо ни дужину ни ширину. Дакле, изјављујемо ново својство радијуса специфично за класу и надјачавамо методу Ареа у складу с тим.

У класи Триангле једноставно надглашујемо методу Ареа и својства су наслеђена од полином основне класе.

Када стварамо објекте изведених класа, преводилац наилази на виртуелну кључну реч током конструкције основне класе и тако тражи прегласане чланове. Прекоморисани чланови се затим позивају у складу с тим.

Наслеђивање на више нивоа

Променимо горњи пример тако да укључује наследство на више нивоа.

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

Предности

Виртуални члан има декларације и дефиниције и у основној и у изведеним класама. Виртуелни чланови су повољни када су у изведеним класама потребне неке додатне функционалности. Служе као додаци.

Правила

  • Променљива се не може прогласити виртуелном. Само својства, методе и догађаји могу бити декларисани као виртуелни.
  • Члан се статички не може прогласити виртуелним.
  • Апстрактни члан не може бити проглашен виртуалним.
  • Приватни члан се не може прогласити виртуелним.
  • Не-виртуелни члан не може се надјачати.
  • Ниво приступа, врста и име виртуелних чланова и чланова који имају предност морају бити исти. На пример, ако је виртуелна метода јавна, превладавајућа метода такође мора бити јавна.

Закључак - Виртуална кључна реч у Ц #

У овом чланку смо разумели концепт виртуалног у Ц #. Видели смо како Ц # имплементира виртуелну кључну реч током извођења и погледали смо примере.

Виртуелни чланови су одличан концепт објектно оријентисаног програмирања. Међутим, за стицање детаљног знања, топло се препоручује учење о апстрактним кључним речима, интерфејсима и новој кључној речи. Ово би увелико помогло у разумевању разлике између свих њих. Ово помаже у реализацији када и када не користити виртуелно.

Препоручени чланци

Ово је водич за виртуелну кључну реч на Ц #. Овдје смо расправљали о томе како виртуално дјелује у Ц # и како горе наведени код дјелује с насљеђивањем и предностима на више нивоа. Такође можете погледати следећи чланак да бисте сазнали више -

  1. Копирајте конструктор у Ц #
  2. Наслеђивање у Ц #
  3. Ц # функције
  4. Ц # иф Изјава
  5. Ако изјава у Питхон-у
  6. Преоптерећење у Јави
  7. Питхон Оверлоадинг
  8. Наслеђивање у ПХП-у
  9. Комплетан водич за наследство Питхона
  10. Врсте конструктора у Ц # са имплементацијом кода

Категорија: