Если методы интерфейса по умолчанию реализованы в C# 8.0, зачем мне вообще нужны абстрактные классы?
Недавно я столкнулся со списком функций, которые рассматриваются для добавления в следующей версии C#. Один из них называется "методы интерфейса по умолчанию":
https://github.com/dotnet/csharplang/blob/master/proposals/default-interface-methods.md
Короче говоря, это позволит вам определить фактические реализации методов на самих интерфейсах, что означает, что интерфейсы теперь могут иметь реализации. Так как это так, и классы C# могут реализовывать / наследовать от нескольких интерфейсов, то почему в мире я бы когда-либо использовал абстрактные классы?
Единственное, что приходит мне в голову, это то, что интерфейсы не могут иметь конструктора, поэтому, возможно, необходимо запустить некоторую логику в конструкторе абстрактного класса, и это оправдало бы определение абстрактного класса.
Есть ли другой сценарий, о котором кто-нибудь может подумать?
2 ответа
Обычно наследование классов воспринимается как таксономия (x '- это' y), в то время как интерфейсы - это поведения (x 'может делать' y), поэтому в подразумеваемом значении есть небольшая разница. Хотя вы правы, что техническое различие менее четко выражено.
Помимо государства, как указано в комментариях,
Base Class
Вы не можете наследовать интерфейс от базового класса. Интерфейс может наследовать только интерфейс. Вам понадобится абстрактный класс для наследования от другого класса. А поскольку вы не можете наследовать от класса, вы не можете переопределить методы класса. Который вы можете переопределить в абстрактном классе.