Модификатор virtual используется для изменения объявлений методов, свойств, индексаторов и событий и разрешения их переопределения в производном классе. В переводе на понятный язык, это означает что методы уже реализованы, но если их реализация не нравится, то их можно переопределить, сделав свою реализацию.
В отличие от абстрактных методов, виртуальные методы уже содержат реализацию, которую можно использовать в наследуемых классах.
Модификатор virtual нельзя использовать с модификаторами static, abstract, private или override.
В примере ниже приведено использование виртуального метода.
Как видно, в наследуемом классе метод не определен, а используется напрямую в классе Program.
abstract class Car
{
abstract public void drive();
abstract public int Wheels { get; set; }
public virtual double Square(int x, int y)
{
return x * y;
}
}
class Opel : Car
{
int _wheels;
public override int Wheels
{
get
{
return _wheels ;
}
set {
_wheels = value;
}
}
public override void drive()
{
// Console.WriteLine(_wheels);
}
}
class Program
{
static void Main()
{
Opel myOpel = new Opel();
myOpel.Wheels = 4;
myOpel.drive();
double sq = myOpel.Square(myOpel.Wheels, myOpel.Wheels);
Console.WriteLine("Колес в квадрате будет: " + sq);
}
}

