2010-12-20 11 views
0
Person studentA = new Student(); 

人は基本クラス 生徒はPersonのサブクラスです。継承多型質問

なぜ上記のコード行を使用するのですか?なぜあなたはしないでください

Student studentA = new Student(); 

答えて

2

場合によっては、より一般的な意味でオブジェクトを参照したいことがあります。ほとんどの人はユーザーインターフェイスを理解していますので、ここでは基本的な例を示します。

キューが何らかの種類になるまで、すべてのコントロールを無効にする画面があるとします。ユーザーは初期入力を入力します。あなたのコントロールは、Textbox、Comboboxes(ドロップダウン)、Buttonsのようなものかもしれません。上記のすべてを参照できる方法は、コントロールとして扱うことです。これは一つの例ですが、あなたはより多くのあなたが、これは、オブジェクト指向の存在のかなり基本的な部分で表示されますプログラミングを始めるよう

foreach(Control c in MyForm.Controls)c.Enabled = false; 

次のようなコードを書くかもしれません。

ほとんどのオブジェクト指向の基本クラスライブラリを見ることができる1つの場所は、この技術を使用するI/Oです。使用可能なすべての入出力ライブラリです。最も抽象的な意味ではストリームがありますが、クラス階層を見ると、Streamコンセプトの多様なバリエーション(ファイルストリーム、ネットワークストリームなど)が表示されます。ストリーム実装の読み書きは、それぞれ「読者」と「ライター」で行われます。いくつかの基本的なプログラミング作業を行うことで、この多型性がどれほど有益であるかについて、本当にいい感じが得られます。たとえば、ストリームから読み込んだコードを作成し、それを抽象化して、渡されるStreamの実装に適用できるようにします。

私が常に人々に提案しようとしていることの1つは、フレームワークのデザイナーとプログラマーがこのような手法を非常に実用的な日常的な使い方でどのように効果的に利用しているかを見るために、

+0

したがって、すべてのオブジェクト(すべてのサブクラスを含む)と話す必要があるときに、それらをすべて基底クラスとして扱い、それらをすべて処理できるように一般化しています。私はそれがあなたの例から得たものだと思います。 – RoR

+0

そうです。 「従業員」を「請負業者」、「一時」、「フルタイム」などとしているにも関わらず、すべての従業員を参照します。それはたくさん起こります。 – t3rse

0

あなたは本当にそれを行うことはありません。しかし、あなたがPersonのベクトルを持っていて、あなたが追加するPersonのいくつかがStudentsだと指定したいのであればどうでしょうか?

おそらく、継承と多型に目を通すべきです。あなたの質問は、あなたが本当に多くのプログラミングを経験する必要がなかったことを示しています。

これは私がgoogleから引き出した最初のリンクです。 http://msdn.microsoft.com/en-us/library/27db6csx%28v=vs.80%29.aspx

+0

上記のポスターは、これは一例ですが、プログラミングを始めるにつれて、これはオブジェクト指向の存在のかなり基本的な部分であることがわかります」 - あなたは「あなたは本当にそれをしないだろう」と言ったが。だから誰が正しいの?そして、はい、私はプログラミングの初心者です。私はこれらの概念を理解しようとしています。 – RoR