抽象类可以由另一个类继承,并要求人们覆盖抽象函数,抽象属性等。
一个接口也可以由另一个类实现,也需要人们实现函数,属性,索引器等。
我发现唯一不同的是Visual Studio足够聪明,可以自动生成此接口的必要成员。
那么,有什么不同?
谢谢你〜
答案 0 :(得分:5)
从概念上讲,我看到了一个简单的区别。
接口定义了对类的期望。它声明实现者必须提供某些行为(方法,属性,事件)。它没有规定一个类应该如何工作,只是它应该做什么。
抽象类是一个无法单独实例化的基类。通常它提供了一个部分实现,可以在从它派生的具体类之间共享。因此,它规定一个类应该如何。
由于语言限制,这反过来导致了一些实际差异(例如,C#不支持多重继承,除了接口)。使用哪个真正取决于你想要达到的目标。
答案 1 :(得分:1)
答案 2 :(得分:1)
在.NET中,类仅限于单继承,但可以实现任意数量的接口。如果从一个抽象类继承,那么这是唯一可以使用的类。这可能不是什么大不了的事,但作为一个例子,它可能会阻止你继续从MarshalByRefObject继承。
此外,抽象类定义的行为仅限于从其继承的类。另一方面,接口定义的行为(IDisposable,IPrintable等)可以跨类层次结构应用。
答案 3 :(得分:0)
接口根本没有实现,但抽象类可以实现方法和属性。
答案 4 :(得分:0)
添加到@Jeremy简短明了的答案:) 抽象类将具有“抽象”和“虚拟”关键字,这些关键字将指定方法或属性是否具有实现。 抽象方法/属性必须在具体类中实现,但虚拟方法/属性可能不在具体类中被覆盖,因为它已经在抽象类中具有实现... < / p>
我希望自己明确表示:))