【问题标题】:Exact use of Abstract class抽象类的准确使用
【发布时间】:2010-09-19 08:12:36
【问题描述】:

抽象类的确切用途是什么?普通类不能像抽象类那样做同样的事情吗?

【问题讨论】:

标签: c# abstract-class


【解决方案1】:

常规类要求您提供所有方法的实现。
接口要求您为所有方法提供任何实现。

抽象类是唯一允许您同时拥有包含实现的方法和不提供实现但需要继承类来提供实现的方法的类类型。

您可以添加没有实现的方法这一事实是您无法实例化抽象类的原因:您只能实例化具有其所有方法的实现的东西。

【讨论】:

    【解决方案2】:

    使用抽象类来提供一些具体的实现,但不允许实例化。你总是可以实例化一个普通的类,如果它不能独立存在就没有意义。同时,如果有一个在所有实现类中都相同的具体实现,那么一个接口可能还不够。一个抽象类就够了。

    • 接口:只有契约,没有实现,没有实例化
    • 抽象类:契约,一些实现,没有实例化
    • 类:契约、实现、实例化

    【讨论】:

    • 我怎么可能在第三节课上签约。因为合同意味着该方法的声明,这意味着“抽象”。并且编译器强制转换为抽象类这就是为什么在普通类中如何可能契约。如果我的逻辑错了,请纠正我。
    • 我很困惑你所说的合同是什么意思
    【解决方案3】:

    与常规类不同,abstract 类可以包含 abstract 方法。它们的行为很像界面成员。

    同时,它们几乎可以做常规类可以做的所有其他事情:它们可以实现方法、包含字段和嵌套类型、从另一个类派生等等。

    【讨论】:

      【解决方案4】:

      当您希望子类继承某些基本功能时使用抽象类,但实例化基类没有意义。例如,如果你有类似 Shape 基类的东西,你可以有一些可以被子类使用的内置实现以及你希望子类实现的接口方法。但是,创建 Shape 对象可能没有意义。抽象类为您提供了此功能。另一个使用抽象类的好例子是abstract factory pattern

      【讨论】:

        猜你喜欢
        • 2011-07-13
        • 2012-05-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-17
        • 2011-06-15
        • 1970-01-01
        • 2014-09-13
        • 2011-03-20
        相关资源
        最近更新 更多