Основы объектно-ориентированного программирования на языке C# book | Page 138
7 Класи
}
}
Щоб не було плутанини в термiнологiı̈, розглянемо ще один при-
клад, що демонструє полiморфiзм (перевизначення) i перевантаження
методiв.
using System;
namespace Polymorphism2
{
class A
{
public virtual string DemoPoly(string a)
{
return "Base class. Display string";
}
public virtual string DemoPoly(double a)
{
return "Base class. Display double";
}
}
class B : A
{
public override string DemoPoly(string a)
{
return "Inharitance class. Demo Poly string";
}
public override sealed string DemoPoly(double a)
{
return "Inharitance class. Demo Poly double";
}
}
class Program
{
public static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.WriteLine(a.DemoPoly("test"));
Console.WriteLine(b.DemoPoly("test"));
Console.WriteLine(a.DemoPoly(3.14));
Console.WriteLine(b.DemoPoly(3.14));
Console.ReadKey();
}
}
}
У даному прикладi в базовому класi А два методи Demopoly(string
a) i Demopoly(double a) , якi перевантаженi ( overload ) у даному класi
- у них рiзна сигнатура. У похiдному вiд А класi В є тi ж методи, якi
перевизначенi ( overrive ). Додатково в класi B метод Demopoly(double
a) позначений як запечатаний sealed . Це зроблено для того, щоб при-
пинити вiртуальне спадкування. Але слiд зауважити, що запечатанi
методи можна перевизначити у похiдному класi використовуючи клю-
138