using System;
/*
* Полиморфизм
*
* виртуальные методы
*
* virtual
*
* override
*/
///
/// virtual и override - дают возможность переопределить работу методов в классе наследнике
///
class Motor
{
///
/// Чтобы метод был доступен на уровно наследника вместо private ставим protected
///
protected virtual void StartEngine()
=> Console.WriteLine("Двигатель запущен!");
///
/// Чтобы переопределить метод для новой реализации в наследнике
///
public virtual void Drive()
{
StartEngine();
Console.WriteLine("Я еду!");
}
}
class SportMotor : Motor
{
protected override void StartEngine() => Console.WriteLine("Рон дон дон");
///
/// Переопределение виртуального метода
///
public override void Drive()
{
StartEngine();
Console.WriteLine("Я быстро еду!");
}
}
class Stable
{
public void Drive(Motor motor) => motor.Drive();
}
class Program
{
static void Main()
{
var stable = new Stable();
stable.Drive(new SportMotor());
Console.ReadKey();
}
}