What's the difference between an abstract class and an interface?
假设我们在一个接口中有两个方法
因此,在我看来,对于我的场景,接口或抽象类的行为是相同的。那么,在这种特定的情况下,是否有人能强调这两者之间的区别,并建议在这里使用抽象类还是接口?
抽象类和接口之间存在技术差异,抽象类可以包含方法、字段、构造函数等的实现,而接口只包含方法和属性原型。一个类可以实现多个接口,但只能继承一个类(抽象类或其他类)。
然而,在我看来,接口和抽象类之间最重要的区别是语义差异。
接口定义了什么东西可以做(它的行为方式),抽象类定义了什么东西。
以
与洗衣机的例子相比,继承它的任何东西都是一种洗衣机。任何继承它的东西都将是一种洗衣机,一个顶部装载机,或侧面装载机,等等。
相反,如果您有一个名为
总之,类定义什么是什么,接口定义什么是可以做的。
来自MSDN:
By using interfaces, you can, for example, include behavior from
multiple sources in a class. That capability is important in C#
because the language doesn't support multiple inheritance of classes
因此,如果希望任何类都可以继承该方法,请使用Interface。
来自同一个msdn页面:
In addition, you must use an interface if you want to simulate
inheritance for structs, because they can't actually inherit from
another struct or class.
关于接口和抽象类之间区别的两个快速思考:
抽象类不仅包含抽象方法,还可以包含其他带有实现的字段和方法。在C中,您不能从多规则类继承,但可以实现多规则接口。所以简单的答案是:尽可能使用接口而不是抽象类。在您的示例中,有可能-建议使用接口。
接口允许类继承/实现多个接口,而在C中,只能从一个类继承。
基本上是多重继承。