(1/3)C#やVB.NETを使うのに必要なオブジェクト指向の知識を丁寧に解説。今回は継承のまとめとしてObjectクラスを中心に学ぶ。継承を使わないとしても知っておくべきこと前回では継承によってもたらされるオブジェクト指向プログラミングの仕組みとして、派生クラスのオブジェクトは基本クラスのオブジェクトとして扱えるということを解説しました。「Objectクラスがすべてのクラスの基本クラスとなる」という事実です(ObjectクラスはSystem名前空間に分類されています)。今回はクラス・ライブラリの頂点ともいうべきObjectクラスを中心に、継承について解説を進めていきます。System名前空間のObjectクラス前回でFormクラスは(間接的ですが)Controlクラスの派生クラスであることを見てきました。一度、Formクラスのクラス階層をリファレンス・マニュアルで見てみると、そのルート(根元)には「System.Object」というクラスがあることが分かります。Formクラスのクラス階層Formクラスの基本クラスとしてControlクラスがあったが、さらに根元までさかのぼっていくとObjectクラス(System名前空間)がある。どのクラスの解説を見てもObjectクラスがルートになっていることが確認できます。基本クラスを指定せずに定義したクラスいま「Objectクラスはすべてのクラスの基本クラス」と述べましたが、基本クラスを指定せずに定義した自作のクラスはどういう位置付けになるのでしょうか。このような基本クラス指定のないクラスについては、次のような暗黙のルールがあります。次のように、基本クラスとしてSystem.Objectを指定したのと同じになります。このようなルールがあるため、すべてのクラスの基本クラスはObjectクラスである、別のいい方をすると、すべてのクラスはObjectクラスから派生している、という事実が成り立つわけです。ちなみに、System.Objectクラスはこのように特別なクラスであるため、C#では単に「object」、VB.NETでは「Object」というキーワードで簡単に記述できるようになっています。これにより、上記のコードは次のように記述することもできます*1。System」を記述していないことに注意してください。objectやObjectというキーワードは、System.Objectクラスのエイリアス(alias、別名)です。C#やVB.NETのコンパイラは、これらのキーワードをクラス・ライブラリのSystem.Objectクラスに置き換えます。すべてのクラスが持つObjectクラスのメンバすべてのクラスはObjectクラスの派生クラスであるため、Objectクラスのメンバを継承していることになります。Objectクラスにはプロパティはありませんが、5つのパブリックなメソッドがあります。これらのメソッドは、どんなオブジェクトに対しても呼び出すことができます。ここでは、その中でもToStringメソッドについて見てみましょう。◆ToStringメソッドToStringメソッドは「オブジェクトを表す文字列」を返します。オブジェクトを表す文字列とは何かというと、Objectクラスでの実装では、そのオブジェクトの型を示す文字列となります。次のようなコードでは「System.Object」という文字列が出力されます*2。このコードを記述したプロジェクトがコンソール・アプリケーションの場合には、コマンドプロンプトに出力されます。.NETからWindowsアプリケーションにより実行した場合には、[出力]ペインに出力されます。ここで使用しているConsoleクラス(System名前空間に含まれています)の静的なメソッドであるWriteLineメソッドは、標準出力に対して文字列を出力するためのものです。C言語では、デバッグなどのメッセージを出力するのにprintf関数がよく用いられましたが、同じ目的でC#やVB.NETでは、このConsole.WriteLineメソッドがよく使われます。いくつかのクラスでは、ToStringメソッドをオーバーライドしていて、そのオブジェクトが持つインスタンス・データを整形して表示したりします。ToStringメソッドをオーバーライドするクラスの例ObjectクラスではToStringクラスは仮想メソッドとして定義されており、その型を示す文字列を返すようになっている。このメソッドは任意のクラスでオーバーライドでき、クラス独自の文字列を返すことができる。本連載でもよく利用しているFormクラス(System.Windows.Forms名前空間)のToStringメソッドは、型に続けて、そのウィンドウのタイトル(Textプロパティの内容)を返します。日時を表すDateTimeクラス(正確にはDateTime構造体)では、日付と時間を整形して返します。各クラスのToStringメソッドは、デフォルトの動作として型を文字列として返すという機能を持っていますが、それを独自にカスタマイズできるということになります。自作したクラスでも必要に応じてToStringメソッドをオーバーライドし、デバッグ用にフィールドの値を文字列として返すといったことができます。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。