抽象クラスとC#でのインタフェースの違い相違点

Anonim

のように見えます。抽象クラスはインターフェイスのように見えますが、OOPの初心者にとっては少し混乱します。概念的に言えば、抽象クラスは実装のないインターフェイスのように見えますが、違いはありません。抽象クラスは部分的または完全に実装できますが、インタフェースは完全に実装する必要があります。さて、この2つの最も顕著な違いは、抽象クラスはデフォルトの実装を持つことができますが、インターフェイスはメンバ宣言だけを含むメソッドの定義にすぎないということです。両方の理論的側面について詳しく説明しましょう。

<! - 1 - >

抽象クラスとは何ですか?

抽象クラスは、他のクラスの基底として機能し、インスタンス化できない特別な型のクラスです。抽象クラスの実装ロジックは、その派生クラスによって提供されます。抽象クラスを抽象的にするために、「抽象的な」修飾子が使用されています。これは、いくつかの欠落した実装を、そのクラスから派生したクラスに実装する必要があることを意味します。抽象メンバと抽象メンバの両方を含んでいます。抽象クラスは、複数の派生クラスによってさらに共有されオーバーライドされる基本的な機能を提供することを目的としています。あらゆる種類のコードの重複を避けると便利です。インターフェイスに非常によく似ていますが、機能が追加されています。

<! - 2 - >

インターフェイスとは何ですか?一方、インタフェースは、機能の署名のみを含むクラスではありません。実装されていないパターンです。概念的に言えば、メンバーの宣言だけを含むメソッドの定義です。これは、メンバーの実装を含まない空のシェルです。メソッド、イベント、インデクサ、プロパティなどの抽象メンバのみを含む抽象基本クラスに似ています。直接インスタンス化することはできず、メンバはどのクラスでも実装できます。さらに、クラスによって複数のインタフェースを実装することもできますが、クラスは単一のクラスのみを継承できます。

<!抽象クラスとインタフェース:C#での抽象クラスとインタフェースの違い

多重継承

- クラスは抽象クラスを1つしか使用できないため、多重継承はサポートされていません。一方、インタフェースは複数の継承をサポートすることができます。これは、クラスが継承の任意の数を継承できることを意味します。

  1. C
  2. 抽象クラスとインタフェースの定義 - 抽象クラスは、実装のない定義を含む特別な型のクラスです。実装ロジックは、その派生クラスによって提供されます。抽象メソッドと抽象メソッドを持つことができます。一方、インターフェースは、何もできないパターンに過ぎません。技術的には空のシェルだけです。実装 - 抽象クラスは、定義とその実装の両方を含むことができる。これはインスタンス化できない不完全なクラスです。インタフェースは、コードなしで機能の署名のみを持つことができます。アクセス修飾子 - 抽象クラスは、サブ、関数、プロパティなどのいくつかのアクセス修飾子を持つことができますが、インタフェースはアクセス修飾子を持つことができず、すべてのメソッドを暗黙的にpublicとして定義する必要があります。同質性 - 抽象クラスは、同じ型、動作、およびステータスの実装に使用され、インタフェースはメソッドシグネチャのみを共有する実装に使用されます。宣言
  3. - 抽象クラスは他のすべてのクラスの基本クラスとして機能するため、インタフェースで任意の変数を宣言できない間に任意の変数を宣言または使用できます。 コンストラクタ宣言
  4. - 抽象クラスはコンストラクタ宣言を持つことができますが、インタフェースはコンストラクタ宣言を持つことはできません。 Core vs. Peripheral - 抽象クラスは、クラスのコアIDを定義するために使用され、同じデータ型のオブジェクトに使用できます。一方、インタフェースは、クラスの周辺機能を定義するために使用されます。
  5. Rigid vs. Supple - 抽象クラスは、少なくとも開発者の視点から見ると、機能面でより柔軟ですが、インターフェイスはより厳格です。
  6. 抽象クラス対インタフェース:表形式 抽象クラス
  7. インタフェース 抽象クラスは、関数、サブ、およびプロパティのメンバー宣言のためのすべてのアクセス修飾子を持つことができる。
  8. インタフェースは、関数、サブプロパティ、プロパティなどのメンバ宣言のためのアクセス修飾子を持つことはできません。すべてのメンバは、暗黙的にpublicとみなされます。 クラスはたいてい抽象クラスを1つしか使用できません。クラスは、任意の数のインタフェースを継承することができる。
  9. 多重継承は抽象クラスではサポートされていません。 インタフェースは多重継承をサポートします。

技術的には、定義と実装の両方を含む場合と含まない場合があります。

インタフェースは機能のシグニチャしか持つことができないので、基本的には空のシェルです。

抽象クラスはメンバーを含むことができる。 const、定義されたメソッド、およびメソッドスタブ。

インタフェースはメソッドとconstのみを含むことができます。 クラスのコアIDを定義し、同じデータ型のオブジェクトを記述するために使用されます。
クラスの周辺能力を記述するために使用されます。 抽象クラスのメンバは、完全メンバでなければ静的にすることはできません。
インターフェースのメンバーは静的にすることはできません。 同じ種類の共通の動作の実装には理想的です。
いくつかの実装がメソッドシグネチャだけを共有する場合は、インタフェースを使用する方がよいでしょう。 コンストラクタ宣言を持つことができます。
コンストラクタ宣言はできません。 抽象クラスは、事前定義されたフィールドとコンストレイントを持っています。
フィールドはフィールドで定義することはできません。 抽象メソッドと非抽象メソッドの両方を持つことができます。
抽象メソッドのみを持つことができます。 要約
抽象クラスとインタフェースの違いは何ですか?これはおそらく、技術面接で最もよく聞かれる質問の1つです。任意のC#チュートリアルで抽象クラスとインターフェイスに関する膨大な情報を見つける可能性は高いですが、この2つの違いを理解するのはかなり難しい作業です。あなたが見つけることができ、まだ十分に得られないすべての情報を統合することができます。概念的には、どちらもプログラミングで最も重要な用語であり、全く同じですが、機能面ではかなり異なっています。抽象クラスは他のクラスのベースとして機能する特別な型のクラスですが、インタフェースはメンバー宣言だけを持つ空のシェルです。