【发布时间】:2010-09-19 08:12:36
【问题描述】:
抽象类的确切用途是什么?普通类不能像抽象类那样做同样的事情吗?
【问题讨论】:
-
看看Template Method Design Pattern我认为抽象类在那里是不可替代的。
标签: c# abstract-class
抽象类的确切用途是什么?普通类不能像抽象类那样做同样的事情吗?
【问题讨论】:
标签: c# abstract-class
常规类要求您提供所有方法的实现。
接口要求您不为所有方法提供任何实现。
抽象类是唯一允许您同时拥有包含实现的方法和不提供实现但需要继承类来提供实现的方法的类类型。
您可以添加没有实现的方法这一事实是您无法实例化抽象类的原因:您只能实例化具有其所有方法的实现的东西。
【讨论】:
使用抽象类来提供一些具体的实现,但不允许实例化。你总是可以实例化一个普通的类,如果它不能独立存在就没有意义。同时,如果有一个在所有实现类中都相同的具体实现,那么一个接口可能还不够。一个抽象类就够了。
【讨论】:
与常规类不同,abstract 类可以包含 abstract 方法。它们的行为很像界面成员。
同时,它们几乎可以做常规类可以做的所有其他事情:它们可以实现方法、包含字段和嵌套类型、从另一个类派生等等。
【讨论】:
当您希望子类继承某些基本功能时使用抽象类,但实例化基类没有意义。例如,如果你有类似 Shape 基类的东西,你可以有一些可以被子类使用的内置实现以及你希望子类实现的接口方法。但是,创建 Shape 对象可能没有意义。抽象类为您提供了此功能。另一个使用抽象类的好例子是abstract factory pattern。
【讨论】: