1|2|3取りあえずプログラムが完成ここまでで2つのクラスが完成したので、取りあえず実際にコンパイルして実行してみたいところですが、いま作った2つ目のMyApplicationクラスは、いったい誰がインスタンス化して、そのStartメソッドを呼び出してくれるのでしょうか。■プログラムの実行時に呼び出されるMainメソッドコンパイラも、プログラムの実行環境であるWindowsも、クラスをインスタンス化するような機能は持っていません。コンパイラによって作成された実行ファイル(EXEファイル)には、それが実行された場合に「Main」という名前のメソッドを呼び出すという機能があります。先ほどのMyApplicationクラスのStartメソッドを、まずMainという名前に変更すればよい、ということになります。Startメソッドが含まれていたMyApplicationクラスのオブジェクトを作成する者が誰もいません。そんなときに備えて(というわけでもないのですが)、多くのオブジェクト指向言語には「静的メソッド」という、抜け道ともいえる機能が用意されています。静的メソッドとは、メソッドの定義にstatic(VB.NETではShared)を付けたものです。これを付けておくと、そのメソッドが含まれているクラスをインスタンス化してオブジェクトを作成しなくても、直接そのメソッドを呼び出すことができるようになります。オブジェクト指向を台無しにしてしまうのではと思わせるような静的メソッドですが、詳細は次回以降で解説するとして、ここではMainメソッドを静的メソッドに変更してプログラムを完成させましょう。いうことで、MyApplicationクラスは次のようになります。Formクラスの方では、WidthプロパティとHeightプロパティを記述(定義)していないので、その操作はコメントアウトしました(コメント文にしました)。このクラスをコンパイルしてプログラムを実行すると、まずこのMainメソッドが呼び出されることになります。プログラムのコンパイルと実行にはFormクラスの定義も必要です。2つのクラスをコンパイルして実行ファイルを作成する前に、Formクラスの方も少し修正します。先ほど作成したFormクラスはクラスの外枠しか作っておらず、メソッドの中身はコメントだけだったので、Formクラスを実際にコンパイルすると一部分がコンパイル・エラーとなります。コンパイルできるように最低限の修正を加えたFormクラスの定義は次のようになります(太字が修正した部分)。Textプロパティの定義では、それがstring型(文字列型)を返すことになっているので、get部分は文字列を返さないとコンパイル・エラーとなります。Textプロパティによりタイトルバー文字列の取得が行われた場合に何も返さないというのはさみしいので(string型のフィールドは自動的に空文字に初期化されます)、コンストラクタではbartextフィールドの初期値として“未設定”という文字列を設定しています。.NETでコンパイルと実行ようやく2つのクラスが完成しました。.NETをお持ちの方は、新規プロジェクトで「コンソール・アプリケーション」を選択し、自動的に作成されるコードを全部消してから、いま作成した2つのクラスをそれぞれコピー&ペーストしてみてください。.NETにペースト新規プロジェクトで「コンソール・アプリケーション」を選択し、すでにあるコードを全部消してから、いま作成した2つのクラスをそれぞれコピー&ペーストする。[F5]キーを押すなどして「プログラムの開始」を実行すれば、プログラムはコンパイルされて実行されるはずです。実際のウィンドウを開くようなコードは1行たりとも書いていないので、当然ながらプログラムを実行しても大したことは起こりません。ここではコンパイル時にエラーが発生しなければヨシとさせてください。今回のまとめ前述したように、OOPとはすなわち、クラスのプログラミングということになります。コンパイルされたクラスの定義は、実行時にメモリ上にロードされます。.NETでは、プログラムの実行はまずMainメソッドから始まります。Mainメソッドではクラスをインスタンス化してオブジェクトを作り、そのメソッドを呼び出して処理を開始します。その処理中には、同じようにして別のクラスをインスタンス化してメソッドを呼び出すことになるでしょう。OOPにより作成されたアプリケーションの実行メモリ上には、ロードされたクラスのイメージと、実行中に作成されたオブジェクトが存在することになる。アプリケーションの実行自体は、メソッドの呼び出しとメソッドの実行であるOOPにより作成されたアプリケーションはこのようにして動作します。実質的にはメソッド呼び出しと呼び出されたメソッドの実行の連鎖的な繰り返しですが、メモリ上には主に、実行時にロードされたクラスと、実行中に作成されたオブジェクトが存在することになります。次回は、OOPの最初の難関ともいえる「継承」についてお話しする予定です。Frameworkのクラス・ライブラリにはウィンドウを開くための本物のFormクラスが用意されています。次回では、この本物のFormクラスを利用する予定です。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。