Въведение в преодоляването на C #

Преопределянето в C # е повторното прилагане на метод на базов клас във производен клас. В този случай методът на базовия клас е отменен в детски клас. Методът на получения клас има същото име и подпис като метода на базовия клас. Преодоляването е полезно за постигане на полиморфизъм по време на работа.

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

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

public virtual void Method()
(
// implementation
)

2. Override - Тази ключова дума се използва с производен клас, който означава, че производен клас отменя метод на базов клас.

public override void Method()
(
// implementation
)

3. База - Тази ключова дума се използва в производен клас за извикване на метода на базовия клас.

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

Как преодоляването работи в C #?

По-долу е даден пример за това как можем да реализираме преодоляване в C #.

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

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

Видове завишаване в C #

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

Пример 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();
)
)
)

В този пример виртуалният се използва в базовия клас, което означава, че дава правомощия на детския клас да прилага метода по свой начин. В производен клас се използва override, което означава, че методът child е методът override. И двата метода са едни и същи със същото име и подпис на един и същи метод, но частта за изпълнение е различна. В този пример също се използва препратка към родител за извикване на метода на детето. Но тъй като родителят е метод е виртуален, така и методът на детето се извиква първо вместо родителския метод. Така изходът ще бъде

Резултат:

Пример 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();
)
)
)

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

Резултат:

Правила за отмяна на метода

  • Подписът на метод на производен клас трябва да бъде същият като на базовия клас.
  • Отмяна на не е възможно в същия клас.
  • Модификаторите на достъп трябва да са еднакви за виртуалните методи и методите за отмяна.
  • Виртуалната ключова дума се използва в метода на базовия клас, а Override се използва в метод на производен клас.
  • Методът на базовия клас не трябва да е статичен.

заключение

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

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

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

  1. Работа с изключения в C #
  2. Масиви в C #
  3. Метод отменяне в C #
  4. Променливи в C #
  5. Достъп Модификатори в PHP
  6. Полиморфизъм в Java
  7. Абстрактни класове в JavaScript
  8. Примери за тази ключова дума