Въведение в преодоляването на 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 #, заедно с примери. Можете да разгледате и другите ни предложени статии -
- Работа с изключения в C #
- Масиви в C #
- Метод отменяне в C #
- Променливи в C #
- Достъп Модификатори в PHP
- Полиморфизъм в Java
- Абстрактни класове в JavaScript
- Примери за тази ключова дума