【问题标题】:What is different between an abstract and an Interface class in C#?C# 中的抽象类和接口类有什么不同?
【发布时间】:2011-07-14 20:08:35
【问题描述】:

C# 中的抽象类和接口类有什么不同?

【问题讨论】:

标签: c# interface abstract-class


【解决方案1】:

抽象类的目的是为一组派生类如何工作提供基类定义,然后允许程序员在派生类中填充实现。 当我们创建一个接口时,我们基本上是在创建一组没有任何实现的方法,这些实现必须被实现的类覆盖。优点是它提供了一种方法让一个类成为两个类的一部分:一个来自继承层次结构,一个来自接口。

【讨论】:

    【解决方案2】:

    我会通过用法来解释这一点。只有一个层次结构时可以使用抽象类,另外没有默认实现;而接口可以跨层次结构(水平)使用,通常称为行为。

    接口也是一个抽象,在c#中替代了多类继承,所以这可能会让人困惑,但是你必须区分什么时候使用什么。

    希望这会有所帮助, 罗伯特

    【讨论】:

      【解决方案3】:

      接口的层次高于抽象。
      当你设计结构、绘制 uml 时,你应该使用接口。
      当你实现时,你应该使用抽象来提取重复的东西。

      无论如何,不​​同之处不仅仅是语法问题..
      希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        接口不是类,它只是定义类必须公共成员的契约强>实施。

        抽象类只是您不能从中创建实例的类。通常,您会使用它来定义一个基类,该基类为要实现的派生类定义一些虚拟方法。

        【讨论】:

        • 在使用“合同”一词时要小心,因为合同通常比“定义”强得多。合约会提供保证,例如实现永远不会返回 null,或者永远不会抛出异常。仍然为此 +。
        • 它确实提供了保证。它保证了某些方法将存在,无论具体类型是什么(只要具体类型实现了接口)。类型系统基本上是一堆特定的、编码的合同。实际上,您可以在类型系统中编码非空性和非异常抛出 - 它们仍然是合同。
        【解决方案5】:

        而不是在这里写完整的东西..

        试试http://www.codeproject.com/KB/cs/abstractsvsinterfaces.aspx

        【讨论】:

          【解决方案6】:

          一个类可以实现多个 接口,但只能继承自 一个抽象类。

          另外,抽象类可能定义了一些函数,但接口没有任何函数定义,派生类必须定义所有函数。

          【讨论】:

            【解决方案7】:

            谷歌“抽象类与接口”,你会得到很多解释性文章...

            【讨论】:

              【解决方案8】:

              一个类可以实现多个接口,但只能从一个抽象类继承。

              抽象类可以为其方法提供实现。接口不能提供实现。

              【讨论】:

                猜你喜欢
                • 2010-11-04
                • 2010-12-27
                • 1970-01-01
                • 1970-01-01
                • 2010-09-20
                • 2019-12-14
                • 2018-10-11
                • 2010-12-12
                • 2011-07-05
                相关资源
                最近更新 更多