Являются ли интерфейс и абстрактный класс одним и тем же виртуальными абстрактными методами?

Если у меня есть проект, содержащий аналогичные классы, d некоторые могут использовать ту же реализацию, но в большинстве случаев они реализуют свой собственный способ обработки методов, определенных в интерфейсе или абстрактном классе. Я пытаюсь понять, лучше ли интерфейс / абстрактный класс. Я не понимаю, что такое интерфейс, если вы можете просто использовать абстрактный класс с виртуальными абстрактными методами.

Вот интерфейс:

public interface IAthlete
{
    void Run();
}

Вот абстрактный класс:

public abstract class Athlete
{
    public abstract void Run();
}

Вот реализация интерфейса :

public class Sprinter : IAthlete
{
    public void Run()
    {
        Console.WriteLine("Running Fast....");
    }
}

Вот расширение абстрактного класса:

public class MarathonRunner : Athlete
{
    public override void Run()
    {
         Console.Write("Jogging....");
    }
 }

Теперь, если я решу добавить метод под названием Stop либо к интерфейсу, либо к абстрактному методу, Sprinter и MarathonRunner сломаются, и поскольку я могу предоставить некоторую реализацию по умолчанию для абстрактного, это кажется лучшим выбором. Я что-то упустил?

9
задан Keith Pinson 12 August 2011 в 15:31
поделиться