OriginalGriff
Откуда вы взяли, что абстрактные классы могут быть изменены, а интерфейсы-нет?
Разница в том, что интерфейсы вообще не могут определять код, они просто устанавливают сигнатуры, которые вызовы должны реализовать, чтобы добавить интерфейс. Интерфейсы не являются классами, они являются "контрактом членства", который при соблюдении позволяет классу implementing стать "членом клуба интерфейса".
Абстрактный класс может определять код, который может быть переопределен в производных классах. Абстрактный класс-это полный класс, с условием, что абстрактный класс не может быть создан: вы не можете создать новый класс. new
ключевое слово непосредственно на абстрактном классе.
Это различие позволяет классу быть производным от - например - элемента управления, но также реализовать интерфейс, такой как IEnumerable, который позволяет использовать его в foreach
петля.
Абстрактные классы и интерфейсы-это не одно и то же, и ни один из них не может быть "изменен" без изменения исходного кода абстрактного класса или интерфейса.