Увод у превладавање у Ц #

Прекорачење у Ц # је поновна примена методе основне класе у изведеној класи. У овом је методу основне класе прегласан у класи деце. Метода изведене класе има исто име и потпис као метода основне класе. Поништавање је корисно за постизање полиморфизма рунтимеа.

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

1. Виртуална - Ова кључна реч се користи са основном класом која означава да се метода основне класе може пребрисати.

public virtual void Method()
(
// implementation
)

2. Надјачај - Ова кључна реч се користи са изведеном класом која означава да изведена класа надјачава метод основне класе.

public override void Method()
(
// implementation
)

3. База - Ова кључна реч користи се у изведеној класи за позивање методе основне класе.

public override void Method()
(
base.Method();
// implementation
)

Како превладавање функционира у Ц #?

Испод је пример како можемо да применимо прегласавање у Ц #.

class Parent
(
public virtual void Demo() // base class
(
Console.WriteLine(“This is parent”);
)
)
class Child: Parent
(
public override void Demo() // derived class
(
Console.WriteLine(“This is child”);
)
)

У горњем примеру постоје две класе, једна је основна класа или родитељска класа, а друга је изведена класа или можемо рећи дечија класа. Метода базне класе изведена је у дечијој класи. У овом је метода у родитељу виртуелна, што значи да га дечија класа може надјачати. Прекорачење у детету значи да је ова метода иста као и метода родитељске класе са истим потписом методе.

Врсте превладавања у Ц #

Испод су примери који приказују превладавање различитих кључних речи.

Пример 1 - Без виртуелних и надмашених кључних речи

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public new void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
// main method
static void Main(string() args)
(
Bird b = new Peacock();
b.fly();
Console.ReadLine();
)
)
)

У горњем примеру, ниједна кључна реч се не користи у обе базе, као ни изведене методе.

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

Излаз:

Пример 2 (а) - са виртуелним и надјачаним кључним речима

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
// main method
static void Main(string() args)
(
Bird b = new Peacock();
b.fly();
Console.ReadLine();
)
)
)

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

Излаз:

Пример 2 (б) - Виртуелне и надјачане кључне речи

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
//main method
static void Main(string() args)
(
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
)
)
)

Овај пример је исти као претходни пример, али овај метод се користи за референцу.

Излаз:

Пример 3 - са основном кључном речју

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
base.fly(); // base is use to call parent method
Console.WriteLine("Peacock is flying");
)
)
class Program
(
static void Main(string() args)
(
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
)
)
)

У горњем примјеру, база се користи у изведеној класи како би се позвао метод базичне класе. Дакле, у овој основној методи назива се прво, а затим изведена метода.

Излаз:

Пример 4 - Сажетак наставе са превладавањем

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
abstract class Calculate
(
public abstract int sum();
)
class Values : Calculate // derived class
(
int val1;
int val2;
public Values(int a = 0, int b = 0)
(
val1 = a;
val2 = b;
)
public override int sum()
(
Console.WriteLine("sum of two values");
return (val1 + val2);
)
)
class Program
(
static void Main(string() args)
(
Values v = new Values(10, 20);
int a = v.sum();
Console.WriteLine(a);
Console.ReadLine();
)
)
)

У горњем примјеру се користи апстрактна метода. Апстрактна класа се проводи од изведене класе која садржи апстрактну методу.

Излаз:

Правила за прегласавање метода

  • Потпис методе изведене класе треба бити исти као и основна класа.
  • Поништавање није могуће у истој класи.
  • Модификатори приступа морају бити исти за виртуалне методе и методе поништавања.
  • Виртуална кључна реч користи се у методи основне класе, а Оверриде се користи у изведеној методи класе.
  • Метода основне класе не смије бити статична.

Закључак

Превладавање је корисно у полиморфизму током извођења. То омогућава изведеној класи да на свој начин имплементира методу основне класе. Дакле, примена методе се разликује од изведене класе од своје основне класе. Преписана метода може бити виртуелна, надјачана или апстрактна.

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

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

  1. Руковање изузецима у Ц #
  2. Низи у Ц #
  3. Прегласавање метода у Ц #
  4. Променљиве у Ц #
  5. Приступите модификаторима на ПХП-у
  6. Полиморфизам у Јави
  7. Сажетак наставе у ЈаваСцрипт-у
  8. Примери ове кључне речи

Категорија: