В C # для переопределения метода базового класса в производном классе вы должны объявить метод базового класса как метод виртуального и производного класса как переопределение, как показано ниже:
using System;
namespace Polymorphism
{
class A
{
public virtual void Test() { Console.WriteLine("A::Test()"); }
}
class B : A
{
public override void Test() { Console.WriteLine("B::Test()"); }
}
class C : B
{
public override void Test() { Console.WriteLine("C::Test()"); }
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
C c = new C();
a.Test(); // output --> "A::Test()"
b.Test(); // output --> "B::Test()"
c.Test(); // output --> "C::Test()"
a = new B();
a.Test(); // output --> "B::Test()"
b = new C();
b.Test(); // output --> "C::Test()"
Console.ReadKey();
}
}
}
Вы также можете смешать скрытие метода и переопределение метода, используя ключевое слово virtual и new, поскольку метод производного класса может быть виртуальным и новым одновременно. Это необходимо, если вы хотите переопределить метод производного класса на следующем уровне, так как я переопределяю метод класса B, Test () в классе C, как показано ниже:
using System;
namespace Polymorphism
{
class A
{
public void Test() { Console.WriteLine("A::Test()"); }
}
class B : A
{
public new virtual void Test() { Console.WriteLine("B::Test()"); }
}
class C : B
{
public override void Test() { Console.WriteLine("C::Test()"); }
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
C c = new C();
a.Test(); // output --> "A::Test()"
b.Test(); // output --> "B::Test()"
c.Test(); // output --> "C::Test()"
a = new B();
a.Test(); // output --> "A::Test()"
b = new C();
b.Test(); // output --> "C::Test()"
Console.ReadKey();
}
}
}
ЗОЛОТЫЕ СЛОВА:
Ключевое слово virtual используется для изменения метода, свойства, индексатора или события, объявленного в базовом классе, и позволяет переопределять его в производном классе.
Ключевое слово override используется для расширения или изменения виртуального / абстрактного метода, свойства, индексатора или события базового класса в производный класс.
Новое ключевое слово используется для скрытия метода, свойства, индексатора или события базового класса в производный класс.
НАСЛАЖДАЙТЕСЬ: -)