Привет, сообщество. В чем различие абстрактного класса от интерфейса в C#? Ведь можно сказать, что абстрактный класс, в котором все методы не имеют реализации и помечены как абстрактные, в каком-то роде является интерфейсом. Да, есть существенное различие - интерфейс описывает поведение объекта, т.е. его надо полностью реализовать, в отличие от абстрактного класса в котором, не реализовав абстрактные методы, наследник тоже станем абстрактным классом. Я так понимаю, что интерфейс описывает общее поведение без реализации (для каждого класса своя), а абстрактный класс тогда что делает?
Asked
Active
Viewed 2,178 times
2 Answers
1
В двух словах можно сказать, что абстрактные классы служат для построения иерархии классов с общими свойствами и поведением а интерфейсы определяют общие свойства и поведение для объектов различных классов, не связанных в иерархию.
Vlad from Moscow
- 44,824
1
Интерфейсы пустотелые, поэтому внутри инстанса объекта ничего не двигается и можно спокойно приводить ссылку к любому предку. А класс может содержать поля. Если унаследоваться от двух классов с полями (если бы так было можно), то приведение ко второму требовало бы сдвига ссылки.
А вообще, где-то был вопрос с ответом, охватывающий ещё и семантическую разницу между ними. Сейчас поищу. Нашёл. Проголосовал за закрытие этого как дубликата.
Qwertiy
- 123,725
-
Спасибо. По ссылке нашел все ответы – Vadim Prokopchuk Jan 12 '17 at 19:01