【发布时间】:2010-12-12 04:51:04
【问题描述】:
一个抽象类可以被另一个类继承,需要人重写抽象函数、抽象属性等。
一个接口也可以由另一个类实现,也需要人来实现函数、属性、索引器等。
我发现的唯一不同是 Visual Studio 足够智能,可以自动生成此界面的必要成员。
那么,有什么不同呢?
谢谢~
【问题讨论】:
标签: .net interface abstract-class
一个抽象类可以被另一个类继承,需要人重写抽象函数、抽象属性等。
一个接口也可以由另一个类实现,也需要人来实现函数、属性、索引器等。
我发现的唯一不同是 Visual Studio 足够智能,可以自动生成此界面的必要成员。
那么,有什么不同呢?
谢谢~
【问题讨论】:
标签: .net interface abstract-class
添加到@Jeremy 简短而简洁的答案:) 抽象类将具有“abstract”和“virtual”关键字,用于指定方法或属性是否具有实现。 抽象方法/属性必须在具体类中实现,但虚拟方法/属性可能不在具体类中被覆盖,因为它已经在抽象类中实现...
我希望我说清楚了:))
【讨论】:
从概念上讲,我看到了一个简单的区别。
接口定义了类的期望。它声明实现者必须提供某些行为(方法、属性、事件)。它没有规定一个类应该如何工作,而只是它应该做什么。
抽象类是不能单独实例化的基类。通常它提供部分实现,可以在派生自它的具体类之间共享。因此,它规定了一个类应该如何工作。
由于语言限制,这又会导致一些实际差异(例如,C# 不支持多重继承,除了接口)。使用哪个实际上取决于您要实现的目标。
【讨论】:
在 .NET 中,类仅限于单一继承,但可以实现任意数量的接口。如果你从一个抽象类继承,那是你唯一可以使用的。这可能没什么大不了的,但它可能会阻止您从 MarshalByRefObject 继承,例如。
此外,抽象类定义的行为仅限于从它继承的类。另一方面,由接口(IDisposable、IPrintable 等)定义的行为可以跨类层次结构应用。
【讨论】:
接口可以完全没有实现,但抽象类可以实现方法和属性。
【讨论】:
【讨论】: