2012-03-19 21 views
2

非常に最近聞いたインタビューの質問の一つです。抽象クラスの必要性はここにありますか?

C#の抽象クラスとは何ですか?
抽象クラス - &をインスタンス化できないクラスが抽象またはインスタンスメソッドを含むことが可能であり、コンストラクタ等

インスタンスメソッドは、この抽象クラスを継承するすべての派生クラスのための共通の機能を実装するために使用することができます。

Ok ...ここで、共通の機能を実装するために抽象クラスが必要なのはなぜですか。同じ共通の機能を基本クラスに入れ、派生したクラスが基本クラスのメソッドにアクセスできるようにします。 thats場合、抽象クラスを持つ代わりに..私は基本クラスに行くことができますか?または共通の機能を抽象クラスに入れ、そのクラスに派生クラスをアクセスさせることができますか?

基本クラスが共通の機能の実装を解決できれば、なぜ共通の機能に抽象クラスが必要なのですか?

適切な理解の助けが必要です....

+3

抽象クラス_は基本クラスです。それはベースクラスの専門家です。 –

答えて

5

抽象クラスですが、基本クラスには抽象メンバがいくつかあります。これにより抽象クラスにコードを書くことができます。抽象クラスは抽象メンバを呼び出しますが、実装は一切ありません。抽象クラスから派生した具象クラスを強制的に強制してそれらのメンバを実装します。

抽象クラスを持つのではなく、一部のメンバーがNotImplementException Sを投げるだけで、具体的な基底クラスの利点は以下のとおりです。

  • 派生クラスは、関連するメンバー
  • を実装するために(コンパイル時に)強制されていますクライアントは基本クラスのインスタンスを作成することはできません。適切な「不足している」メンバーを提供する具体的なクラスを使用する必要があります。

例として、先日、私は、Json.NETでJsonConverterに拡張された抽象クラスクラスを書きました。その目的は、プロジェクト内の構造体のコンバーターの基本クラスになることです。空のJSONをデシリアライズしてNULL値に変換し、派生したクラスをフリーにしてに集中します。型固有の部分。それを見て(NodaConverterBase)、それが物事をより明確にするかどうかを見てください。

+0

...オブジェクト指向プログラミングの最も重要なことの1つである「ポリモフィズム」の存在を可能にします。 –

+0

抽象クラスの必要性を理解する助けに感謝します。 – Karthik

1

抽象クラスは、基本クラスとして使用されます。共通の機能を実装したいが、基本クラス型のインスタンスを直接インスタンス化しないようにして、抽象クラスを代わりに使用することができます。

0

動物園の動物を追跡するアプリを書いていたら、モンキー、ゾウ、クロコダイルなどのクラスがあります。それらはすべて動物ですから、ベースを継承させることになりますAnimalのクラス(彼らはすべて食べたり、呼吸するなどの基本的な機能を必要とするので...)。しかし、あなたはただの動物であることは決してありません。そのため、動物の抽象的な表現は必要ありません。

0

トリッキーなフレーズが

"partial implementation." 

あなたのポストに言及するものに加えて、抽象クラスは、すべての機能を実装する必要はありません。また、子供たちが実装されていない機能を実装するか自体が抽象的に宣言する必要がありますです。

関連する問題