具有默认实现的接口和抽象类有什么区别?

Pos*_*rte 6 c# oop abstract-class c#-8.0 default-interface-member

C# 8.0 引入了一个新的语言特性——接口成员的默认实现。

public interface IRobot
{
    void Talk(string message)
    {
        Debug.WriteLine(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

新的默认接口实现提供了特性语言的元素。然而,这也模糊了抽象类和接口之间的界限。

现在使用抽象类而不是具有默认实现的接口有什么好处?

Nic*_*ick 10

很有趣,但是 CLR 将默认接口实现为抽象类。CLR 支持多重继承。 是一篇关于此的好文章。

在 C# 中,当您需要实现(在本例中实际上是继承)多个接口时,您需要默认接口​​,因为该语言不允许您从多个类继承。

抽象类还允许您拥有状态。接口中不允许使用状态(即字段)。