【问题标题】:What is the difference between an interface with default implementation and abstract class? [duplicate]具有默认实现的接口和抽象类之间有什么区别? [复制]
【发布时间】:2019-09-26 11:46:37
【问题描述】:

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

public interface IRobot
{
    void Talk(string message)
    {
        Debug.WriteLine(message);
    }
}

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

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

【问题讨论】:

  • 你只能从一个抽象类继承,但你可以实现多个接口(只要它们没有冲突的默认实现)。抽象类也可以具有您初始化的状态(字段)。
  • 他们没有什么共同点。 DIM 不指定任何类型的继承关系,而抽象类则指定。 DIM 用于实现接口版本控制和traits,这是一种提供可重用代码来实现类的方法,
  • @juharr 你可以实现多个接口,即使它们有冲突的默认实现。

标签: c# oop abstract-class c#-8.0 default-interface-member


【解决方案1】:

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

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

抽象类也允许你拥有状态。接口中不允许状态,即字段。

【讨论】:

  • 不是本文显示的内容。它显示方法签名,而不是接口实现本身。 DIM 由运行时本身支持,而不是通过抽象类实现
  • 如果您在Sharplab.io 中测试代码,您将发现除了Warn 之外的接口是相同的
  • @PanagiotisKanavos DIM 代表什么?
猜你喜欢
  • 1970-01-01
  • 2010-11-13
  • 2013-02-17
  • 1970-01-01
  • 2018-05-16
  • 2023-03-03
  • 2012-04-28
相关资源
最近更新 更多