抽象类和接口之间有什么区别?
这个问题在这里已经有了答案:
抽象类和接口之间存在技术差异,作为抽象类可以包含方法,字段,构造函数等的实现,而接口只包含方法和属性原型。 一个类可以实现多个接口,但它只能继承一个类(抽象或其他)。
但是,在我看来,接口和抽象类最重要的区别是语义上的差异。
一个接口定义了什么可以做(它的行为),一个抽象类定义了什么是。
以IEnumerable
为例,其背后的语义意义是任何实现IEnumerable
东西都是可枚举的,它并不意味着它是一个枚举,而是它可以像一个枚举(可以枚举)。
与洗衣机的例子相比,任何继承它的东西都是一种洗衣机。 任何继承它的东西都会是一台洗衣机,一台顶部装载机或侧面装载机等。
相反,如果你有一个名为ICanWash
的接口,它可以包含一个名为Wash
的方法。 你可以有各种各样的东西来实现ICanWash
,无论是一个Person
,一个抽象的洗衣机类,等等,其中实际的实现并不重要,只需要知道它的行为就是可以清洗的东西。
总之,类定义了什么是东西,接口定义了什么可以做。
来自MSDN:
例如,通过使用接口,您可以在一个类中包含多个来源的行为。 该功能在C#中非常重要, 因为该语言不支持类的多重继承
因此,如果您希望任何类都可以继承该方法,请使用接口。
从相同的MSDN页面:
另外,如果你想模拟继承结构,你必须使用一个接口,因为它们实际上不能从另一个结构或类继承。
接口允许类继承/实现多个接口,而在C#中,只能从一个类继承。
基本上是多重继承。
链接地址: http://www.djcxy.com/p/54243.html上一篇: What's the difference between an abstract class and an interface?
下一篇: How do you set a conditional in python based on datatypes?