http://blogs.wankuma.com/rti/archive/2007/07/31/87955.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門4
http://blogs.wankuma.com/rti/archive/2007/07/30/87742.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門3
http://blogs.wankuma.com/rti/archive/2007/07/26/87105.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門2
http://blogs.wankuma.com/rti/archive/2007/07/25/86988.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門1
の続きです。
どこからフォローすれば良いのかわからないので、先頭から順に行ってます。
今回は
クラスは継承できる
というテーマです。
ボタンコントロールに Text プロパティってありますよね?
このプロパティは、テキストボックスにもラベルにもあります。
こういうメンバは、Visible プロパティとか Enabled プロパティなど他にもたくさんあります。
このようにたくさんのクラスで共通して実装されているメンバですが、各クラスごとに実装させているのでしょうか?
仮にそうだとすると、以前にも触れた「コードの再利用性」というものが全く生かされていないことになってしまいます。
では、どのようにすれば共通で使用するメンバを一元管理できるのでしょうか?
その答えが継承にあります。
ボタンコントロールは、コントロールクラスを継承しています。
コントロール→ボタン
コントロール→テキストボックス
コントロール→ラベル
実際には、その前にもう一つ継承が入るのですが、説明が口説くなっちゃうので省略します。
興味がある人は MSDN ライブラリとか、オブジェクトブラウザなどで調べて見て下さい。
この例のコントロールクラスのように、継承元となるクラスを基本クラスと言います。
で、継承したクラスを派生クラスといいます。
先ほどの、Text プロパティや、Visible プロパティは、コントロールクラスのメンバで、ボタンやテキストボックスには個別に実装されていません。
しかし、コントロールクラスを継承しているので、コントロールクラスのメンバは継承されます。
試しに、ボタンコントロールクラスを継承して、R・田中一郎ボタンクラスを作ったとしましょう。
以下に C# で書いてみます。
using System.Windows.Forms;
public class R・田中一郎ボタン : Button {
// 中身は空っぽだよーん
}
はい、これでR・田中一郎ボタンが完成です。
嘘だと思うなら、ビルドしてみて下さい。
ちゃんとツールボックスに登録されて、フォームに配置できますし、ボタンコントロールと全く同じように使うことができます。
ちなみに、コントロールクラスも、別のクラスから継承されています。
そして、そのクラスも別のクラスから継承されていて・・・キリが無いですね。
まあ、最終的に、オブジェクトクラスに辿り着く訳です(これは有名ですよね)
ちょっと話がずれてしまいました。
このようにクラスは継承できるため、目的に応じてクラスを作り、必要に応じて継承することで更に他の用途に特化したクラスを作ることができます。
そして基本となるクラスのメンバ変更することによって、そのクラスを継承しているクラス、それを継承しているクラス、それまた・・・と、全てのクラスのメンバが変更される訳です。