Если методы интерфейса по умолчанию реализованы в C# 8.0, зачем мне вообще нужны абстрактные классы?

Недавно я столкнулся со списком функций, которые рассматриваются для добавления в следующей версии C#. Один из них называется "методы интерфейса по умолчанию":

https://github.com/dotnet/csharplang/blob/master/proposals/default-interface-methods.md

Короче говоря, это позволит вам определить фактические реализации методов на самих интерфейсах, что означает, что интерфейсы теперь могут иметь реализации. Так как это так, и классы C# могут реализовывать / наследовать от нескольких интерфейсов, то почему в мире я бы когда-либо использовал абстрактные классы?

Единственное, что приходит мне в голову, это то, что интерфейсы не могут иметь конструктора, поэтому, возможно, необходимо запустить некоторую логику в конструкторе абстрактного класса, и это оправдало бы определение абстрактного класса.

Есть ли другой сценарий, о котором кто-нибудь может подумать?

2 ответа

Обычно наследование классов воспринимается как таксономия (x '- это' y), в то время как интерфейсы - это поведения (x 'может делать' y), поэтому в подразумеваемом значении есть небольшая разница. Хотя вы правы, что техническое различие менее четко выражено.

Помимо государства, как указано в комментариях,

Base Class

Вы не можете наследовать интерфейс от базового класса. Интерфейс может наследовать только интерфейс. Вам понадобится абстрактный класс для наследования от другого класса. А поскольку вы не можете наследовать от класса, вы не можете переопределить методы класса. Который вы можете переопределить в абстрактном классе.

Другие вопросы по тегам