2009-04-14 22 views
85

C#では、インターフェイスをいつ使うべきですか、いつ抽象クラスを使うべきですか?決定要因は何ですか?インタフェースと抽象クラス

+29

私はこれが「正確な」重複であることに同意しません。 –

答えて

107

抽象クラスの利点は以下のとおりです。メソッド

  • のデフォルトの実装を指定する

    • 能力は機能
    • に不変のチェックを追加しました「インターフェース」メソッドが
    • と呼ばれる方法で、もう少しコントロールを持っています
    • "無料"のインタフェースに関連する、または関係のない動作を提供する能力

    インタフェースは単にデータ受け渡し契約に過ぎず、これらの機能はありません。しかし、型は1つのクラスからのみ派生することができますが、任意の数のインタフェースを実装することができるため、通常は柔軟性があります。

  • +0

    @JaredPar:重複した質問に答えることを妨げることになると思います。(btw、私はあなたを落胆させた人ではありません) – Brann

    +11

    @Brann、私は残念ながらその行動を以前に見ました。 OPに投票しても意味がないようです。詐欺師を探すのは彼らの責任です。 – JaredPar

    +2

    私はこの答えに非常に多くのアップフォースがあり、受け入れられた答えであることに驚いています。回答者の偏見(「抽象クラスの利点」とそれに続く4つの利点の後に「インタフェースは単なる」であり、それに続いてインタフェースを優先する単一の「しかし」が続く)を抽象クラスに示すように思われる抽象クラスとインタフェース。私は回答者を攻撃することを意味していませんが、確かにこの質問は、質問に対する最善の正義を行うより客観的な方法で述べるべきです。 – Matt

    5

    実際の質問は、インターフェイスまたはベースクラスを使用するかどうかです。これは前に説明しました。

    C#では、抽象クラス(キーワード "abstract"でマークされたもの)は、単にオブジェクトをインスタンス化できないクラスです。これは、単純に基本クラスとインタフェースを区別するのとは異なる目的を果たします。

    59

    要約クラスとインタフェースは意味的に異なるが、その使用法は重複する可能性がある。

    抽象クラスは、一般的に、同様のクラスの構築基礎として使用されます。クラスに共通する実装は、抽象クラスに含まれることができます。

    インターフェイスは、一般的に、クラスの能力を指定するために使用されます。クラスの似たものは必要ありません。

    6

    複数の継承がないため、クラスをインターフェイス/抽象クラスから継承/継承でき、別の基本クラスから継承できるようにするには、インターフェイスを使用する必要があります。

    関連する問題