深セン嘉華道_03 _建築家の高度なインターフェースと抽象クラス

何であるインターフェースは

インタフェースは、抽象タイプのセットは、そのメソッド名、引数と戻り値を持っているそれぞれの仮想メソッドですが含まれています。

実施任意のインタフェースメソッドを含むことができない、CLRは、インターフェースイベント、プロパティ、インデクサ、静的メソッド、静的フィールド、および一定の静的コンストラクタを含み得ることができます。しかしノート:C#は任意の静的メンバを含めることはできません。

クラスがインターフェイスを継承する場合、クラスは、複数のインターフェースを実装することができ、それだけでなく、達成されるべきインタフェースで定義されているすべての方法であるが、他のインターフェイスから継承されたインタフェースメソッドのすべてを実装します。

何が抽象クラスは

抽象クラスの複数を提供するクラスは、共通のベースクラス定義を共有由来、両方の抽象メソッドを提供することができる、それはまた、非抽象メソッドを提供することができます。抽象クラスは、継承によって派生クラスによって実装されなければならないので、抽象クラスを使用することができない抽象メソッド、インスタンス化できない新たなキーワードを封止することができません。派生クラスが抽象メソッドのすべてを実装していない場合は、派生クラスも抽象宣言する必要があります。さらに、この方法は、抽象的で実装オーバーライドメソッドを実装します。

第三に、類似点と相違点

同じポイント

1.  直接継承によって実現することができる抽象メソッドがインスタンス化されません。

2.  デザインパターンの多くを達成するために、抽象的プログラミングのための技術的な基礎となっています。

異なる点

1.  インターフェイスは多重継承をサポートしています。抽象クラスは多重継承を実装することはできません。

2.  インターフェースのみ抽象ルールを定義することができ、抽象クラスは、いずれかのルールを定義することができ、またメンバーが達成して提供することができます。

3.  インタフェース仕様は、行動の集合であり、抽象クラスは、不完全なクラス、フォーカスグループの概念です。

前記  インターフェースは、サポートコールバックに使用されてもよい。継承がサポートされていないため、抽象クラスは、コールバックを実装していません。

インタフェースは、メソッド、プロパティ、インデクサ、イベントの署名を含むが、フィールドを定義することはできませんとを含む方法を達成するために、抽象クラス、フィールド、プロパティ、実行される方法であっを定義することができます。 

前記  インターフェースは、値と参照型に適用されてもよい。抽象クラスは、参照型に作用することができます。例えば、構造体は、クラスを継承していない、インターフェイスを継承することができます。

類似点と相違点を比較することによって、我々は唯一のインターフェイスと抽象クラスは、自分の強みを持っているが、やや優れていないと言うことができます。実際のプログラミングの練習では、ケースとして我々は、適切な量だけが、経験と蓄積として、私の蓄積、多くの古典から誘導されるのをいくつかに加えて、あなたにいくつかのインスピレーションを与える可能性があり、することができ、私はスタンドを信じますテスト。そのため、ルールや機会、我々はこれらの古典を学び、最も重要なことは、自分の知識を適用することで、もちろん、私は続けてください教えてください、ボー皆の笑いの単語のいずれかになります。

ルールと機会

01.は :オブジェクト指向の考え方の中で最も重要な原則の一つである、覚えておいてください指向のプログラミング・インターフェース

02.  インタフェースと抽象クラスでは、23 抽象指向プログラミング:アイデアの多くのデザインパターンは、私はそれの本質は単純だと思い、達成賢いです。

03.  抽象クラスは、主に近いオブジェクトに使用すべきである、とのインターフェースは、最高の無関係なクラスに共通する機能を提供するために適しています。

04.  インターフェイスは、に焦点を当てCAN-DOの関係タイプ、および抽象クラスが偏っているIS-Aの関係;

05.  インタフェースマルチオブジェクトの挙動を定義して、抽象クラスは、オブジェクトの複数のプロパティを定義します。 

06.  インタフェース定義が使用でき、公開保護内部  およびプライベート修飾子が、ほとんどすべてのインターフェイスのように定義されている公共、その理由はあまり言っていません。

07.  インタフェースでは、すべてのメソッドがデフォルトである公共 

08.  同じインターフェイスは、考慮すべき重要な要因です。インタフェースは拡大を増やしたときにそのため、あなたは新しいインターフェイスを追加する必要がありますが、既存のインターフェイスを変更することはできません。

09.  に対する機能単機能ブロックへのインタフェース設計しようとする.NET Frameworkの例では、IDisposableをIDisposableをIComparableをIEquatableはIEnumerableを他は唯一の共通の方法を含んでいます。

10.  「の前に大文字のインタフェース名、私は」慣例で、フィールド名と同じにはアンダースコアで始まる、これらの原則を遵守してください。

11.  あなたは、問題のバージョンがあるだろうと予想される場合、あなたは「抽象クラス」を作成することができます 例えば、犬(作成・ドッグ)、鶏肉(チキン)とアヒル(ダックを)、あなたは抽象的な動物(検討すべき動物を風の馬、牛の後に発生する可能性のある事柄に対処するため)。すべての派生クラスを変更すると再コンパイル、最高の抽象クラスので、バージョンエンドの質問を達成するために新しいメンバーが必須となりますインターフェイスに追加されます。

12.  実際の実装は、抽象クラスの派生すべての抽象メソッドとアクセサから非抽象クラスの継承を含める必要があります。

13.  あなたは抽象クラスで使用することはできません新しいキーを、密閉することができない、なぜならインスタンス化できない抽象クラス。

図14は、 抽象メソッド宣言に使用することができない 静的  または 仮想  修飾子。

MSDN な提案

1.   あなたはのコンポーネントを作成することが予想される場合は複数のバージョンを、抽象クラスを作成します抽象クラスは、コンポーネントのバージョンを制御するための簡単な方法を提供します。継承されたすべてのクラスの基本クラスを更新することにより、自動的に変更で更新されます。作成したら一方、インターフェースを変更することはできません。あなたがインターフェイスの新しいバージョンが必要な場合は、新しいインターフェイスを作成する必要があります。

2.   関数が異なるオブジェクト間の広い範囲で使用されるように作成された場合は、インタフェースを使用。抽象クラスは、主に近いオブジェクトに使用されなければならない、とのインタフェースは、最高の無関係なクラスに共通の機能を提供するのに適して

3.   あなたが設計したい場合は小型、簡潔な機能ブロックを使用するインターフェイスをあなたが大規模な機能ユニットを設計している場合は、抽象クラスを使用します

4.   機能は、抽象クラスを使用して、達成されている達成するために、すべてのコンポーネント間の共通を提供しますインタフェースは実装の任意のメンバーが含まれていないながら、抽象クラスは、部分的な実装クラスが可能になります。

公開された37元の記事 ウォンの賞賛3 ビュー6317

おすすめ

転載: blog.csdn.net/huan13479195089/article/details/104726822