C#のインターフェイスと抽象クラスとの間の差[予約]

      まず、抽象クラス:
      抽象クラスは、特別なクラスであるが、インスタンス化できない、重要な抽象クラス共通のクラスではない抽象メソッドを含むことができ、また、他の特性を有します。抽象メソッドは抽象クラスで宣言することができ、任意の実装が含まれていない、派生クラスはそれらをオーバーライドする必要があります。さらに、抽象クラスは抽象クラスから派生することができ、基本クラスをオーバーライドすることができ、抽象メソッドが覆われていない場合は、被覆されないことがあり、その派生クラスは、それらをカバーしなければなりません。


       第二に、インターフェイス:
      インターフェイスクラスに同様の参照型は、であり、三の緯線は抽象クラスである:
       インスタンス化することができない、1、
       実装されていないメソッドの宣言を含む、2、
       3、派生クラス必須の実装方法が実装されていません、抽象クラスは、抽象メソッド、インターフェース(だけでなく、他のメンバーを含む方法)のすべてのメンバーであり、

       また、インタフェースは、以下の特徴を有する:
インタフェースは、メソッドに加えて含んでいてもよい、さらなる特性、インデクサ、イベントを含み、これらのメンバーであることができます公有として定義されています。また、任意の他のメンバーのない、例えば:コンスタントドメイン、コンストラクタ、デストラクタ、静的メンバ。クラスは、直接複数のインタフェースを継承するが、唯一の直接(要約を含む)クラスを継承することができます。


      第三に、抽象クラスとインタフェースとの間の差:
      1クラスは抽象オブジェクトである、抽象クラスと呼ばれる抽象クラスとインターフェース仕様または単に所定の動作は、Microsoftとして、対象となるクラスに抽象クラスとして理解することができます。カスタムインターフェイスは、常にそれがクラスで表現されていることを証明できるとフィールドの後に「私にできること....」より抽象クラスは密接に関連して、クラス、およびインタフェースの一連の間で定義されていますが、緩やかな関係の中で最もクラスはの機能を実装 
      、基本的に継承の任意の特定の特性を持っていない、それが唯一のメソッド呼び出しを約束することができます。2.インターフェースの     
      クラスがいくつかのインターフェイスを実装することができたら3. 1つのだけの親クラスを拡張することができます     
      4.インタフェースは、この機能を継承していないコールバックをサポートするために使用することができる。     
      抽象クラスを密閉することはできません。   
      6.詳細な抽象クラスは、仮想デフォルトとして実装されますが、インタフェースクラスメソッドの実装のインタフェースは、非仮想デフォルト、もちろん、あなたが仮想宣言することができますがあります。 
      7.同様の非抽象クラスで(インターフェイス)、抽象クラスには、このクラスの基底クラスのリストに記載されているインタフェースのすべてのメンバーのための独自の実装を提供する必要があります。しかし、抽象クラスはメソッドのインタフェースに抽象メソッドをマッピングすることができます。   
      8.抽象クラスは、OOP、変数と非可変分離の原則を実装しています。抽象クラスとインタフェースを不変として定義されているが、可変サブクラスの座席を達成します。   
      9. A良いインタフェース定義は、インターフェイスまたは原因の汚染、特定の機能ではなく、多機能であるべきです。このクラスは、単にインタフェースを実装する関数であるが、インターフェース内の他のメソッドを実装する必要があった場合は、インタフェースが公害と呼ばれています。   
     機能セットが、ブラックボックス多重化を使用する、すなわち、対象組成物を実現するために、継承を使用して10避け。最も直接的な結果が得られ、継承階層の増加は、あなたがクラスで、この分類群を呼び出すとき、あなたがスタック上にそれらすべてをロードする必要があるということですので!結果は想像することができます。(スタックの原則を理解することの組み合わせ)。同時に、同じような考えを持つ友人がクラスを構築する際に、Microsoftは、多くの場合、オブジェクトのメソッドを組み合わせて使用することがあります。asp.net、Pageクラスの例では、サーバー要求他の属性は、実際に彼らは、クラスのオブジェクトがあります。別のクラスのPageクラスのメソッドとプロパティを呼び出すために、このオブジェクトを使用して、これは非常に基本的な設計原理です。   
     抽象クラスは、インターフェイスを実装している場合11.は、インターフェースメソッドが抽象クラスのインターフェースサブクラスで実装方法を実施することなく、抽象クラスとして抽象メソッドにマッピングすることができる。
   
      第四に、抽象クラスとインタフェースを使用する:
      1。あなたがコンポーネントの複数のバージョンを作成することを期待する場合は、抽象クラスを作成します。抽象クラスは、コンポーネントのバージョンを制御するための簡単な方法を提供します。
      機能が異なるオブジェクト間の広い範囲で使用されるように作成された場合2.インタフェースを使用。あなたは小さく、簡潔な機能ブロックを設計したい場合は、インタフェースを使用しています。
      3.機能部を大きく設計する場合、抽象クラスが使用されている。抽象クラスを使用して、達成された機能を達成するために、すべてのコンポーネントに共通を提供します。   
      4.メイン抽象近いオブジェクトのクラス、およびインタフェースは、クラスとは無関係の一般的な機能を提供するように適合されています。


 ここでは、ハァッ、私はいくつかのメタファー、インターネット上で見たものは本当に良いです:
1.航空機は飛ぶことができ、鳥が飛ぶ、彼らは「飛ぶ」と同じインターフェースを継承してきた。しかし、抽象クラスに属するF22航空機、ハトが所属します鳥抽象クラス。
(マルチ状態)鉄の門の扉のように2ドア(抽象クラス)、あなたは私が(インスタンス化することはできません)与えることはできませんドアをしたいですが、私はあなたの特定の門やドアを与えることができ、かつ唯一可能ドア、あなたはそれが窓(単一継承)であると言うことはできません。ドアをロックすることができます(インターフェース)も(実現よりも多く)ドアベルすることができます。ドア(抽象クラス)はインターフェース(ロック)あなたが何ができるかを設定します(最高1インタフェースはただ一つのことだけを行うことができ、あなたはロックバー(インターフェイス汚染)を鳴らすことができます求めることはできません)、あなたが何であるかを定義します。

ます。https://my.oschina.net/cjkall/blog/195909で再現

おすすめ

転載: blog.csdn.net/weixin_34240657/article/details/91756190