Просто комментарий к вашей заметке.
Существует два типа полиморфизма.
полиморфизм времени компиляции:
Здесь ваше полиморфное поведение определяется до компиляции.
Это происходит с перегрузкой метода, например
public bool DoSomeThing(int myVal)
{
// some code here
}
public bool DoSomeThing(double myVal)
{
// some code here
}
Время полиморфизма:
Именно здесь происходит полиморфное поведение во время выполнения.
Примером этого может быть метод, который принимает тип, который реализует определенный интерфейс (или общий базовый класс). Этот интерфейс может быть другого типа в зависимости от исполняемого кода.
, например
public interface IWeapon
{
void Strike();
}
public class Knife : IWeapon
{
public void Strike()
{
Console.WriteLine("Stab");
}
}
public class Gun : IWeapon
{
public void Strike()
{
Console.WriteLine("Shoot");
}
}
public class Warrior
{
public void Attack(IWeapon weapon)
{
weapon.Strike();
}
}
Теперь, если Воину дается Оружие, результатом Атаки будет Стрельба, а для Ножа - Удар.
Я не тестировал этот код, поэтому возможны синтаксические ошибки и т. Д., Но вы должны быть в состоянии понять эту идею