以上で、ひな型コードには、WindowsApplication1名前空間のForm1クラスという要素があることが分かった。このForm1クラスは第1回で実行した.NETプログラムのウィンドウの「元の姿」である。ソース・コードは、実体そのもの(=ウィンドウ)ではなく、実体を構築するための設計図(=元の姿)でしかない。現実世界では、DNAという設計図に基づいて実体(=人間)が生まれる。それと同じように、プログラミングの世界でも、クラスのコードという設計図に基づいて実体(=インスタンス)が生成されるのである(なお、「クラスのインスタンス」として生成されたものが「オブジェクト」なので、ここで覚えておいてほしい)。現実世界の人間を最初に創造したのは誰か分からないが、ここでは便宜上「創造者」としておこう。プログラミングの世界では、この創造者が誰かということは、はっきりしている。Frameworkの実行エンジン)である。Windowsシステムがすべてのオブジェクトを作り出すわけではない。そのきっかけを作っているだけである。きっかけが作られた後は、あるオブジェクトが次々に新しいオブジェクトを作成していき、最終的にそれらのオブジェクト同士の結び付きややり取りによってプログラム全体が実行されることになる。これは現実世界で、人間が人間を生んでいき、最終的にそれらの人間同士の結び付きとやり取りによって社会全体が回っていくことに似ている。プログラミングの世界では、これらのオブジェクトが生誕する最初のきっかけとなる場所は、「エントリ・ポイント」と呼ばれる。プログラム実行のきっかけとなるエントリ・ポイントエントリ・ポイントをきっかけとして、クラスという設計図からオブジェクトが作成され、最終的にプログラム全体が実行される。■アプリケーションのメイン・エントリ・ポイント「Mainメソッド」C#のエントリ・ポイントは「Mainメソッド」である(メソッドについては後述)。C#では常にMainメソッドがエントリ・ポイントとなるので、プログラム内に最低1つのMainメソッドが必要となる(なおVBでは、このMainメソッドを省略することもできるが、その際には暗黙的にプログラム内にMainメソッドが作成される)。次のコードを見ると、確かにソース・ファイルの中にMainメソッドがあるのが確認できる。MainメソッドがあるのはProgram.csファイルである。Main(){......中略......}}}ひな型ソース・コードの中のエントリ・ポイントであるMainメソッドアプリケーションには1つ以上のエントリ・ポイントが必要である。Mainメソッドについて解説する前に、Programクラスと「///」で始まる行の意味について簡単に触れておこう。Programクラスは次のように記述されている。Program{......中略......}このコードではまずアクセシビリティが省略されている。Program」と記述したのと等価になる。次に「static」という修飾子が付けられている。static修飾子を付けたクラスは「静的クラス」と呼ばれ、先ほど説明したクラスのインスタンス化が不要になる機能だ(※ちなみにVBには静的クラスという機能はない)。静的クラスは、プログラムを実行すると、.NETの実行エンジンによって自動的に読み込まれるので、インスタンス化することなく、そのクラス内のメソッドが使えるようになる。C#では、次のコードのように「//」や「///」(VBでは「'」)が記述されている行は「コメント」と呼ばれ、「//」から、その行の行末までの部分は最終的に生成されるプログラムには含まれない。コメントを使えば、プログラムの内容説明や注意書きをソース・コードの中に記述することができる。既存のコードの先頭部分に「//」を記述すれば、そのコードをコメント化、つまりプログラムに含まれないようにすることができる(「コメント・アウト」と呼ばれる)。.NETでAPIリファレンスを作る(後編)」を参照してほしい)。脱線したが、Mainメソッドに話題を戻す。上記コードを見れば分かるように、C#でのMainメソッドの書き方は、次のとおりだ。Model)のための設定である。メソッドの前に、[......](角カッコ)で記述されるコードは「属性」と呼ばれる.NET言語特有の機能である(詳しくは、改訂版C#入門の「実行時に参照可能な属性」、もしくはプロフェッショナルVBプログラミングの「属性」を参照していただきたい)。現段階で、このSTAThread属性の意味を正しく理解する必要はないが、MainメソッドにはSTAThread属性が必要なことは覚えておいてほしい(なおVBの場合は、暗黙的にSTAThread属性が設定されるので、必ずしも記述する必要はない)。次に「static」というキーワードがある。C#では、このstaticキーワード(VBではSharedキーワード)で修飾されたメソッドは静的メソッドと呼ばれ、クラスの実体(つまりオブジェクト)がなくても呼び出すことができる。静的メソッド以外のメソッドは、それを呼び出すためには、必ずそのメソッドが所属するクラスのオブジェクトが必要になる(詳細次回)。実は前述の静的クラスでは、静的メソッドしか記述できない仕組みになっている。Mainメソッドは、オブジェクトを作成するためのきっかけとして呼ばれるもので、それが呼ばれる時点では、オブジェクトが1つも存在していない。よって、オブジェクトなしでメソッドへのアクセスを可能にするstaticキーワード(VBではSharedキーワード)が必要になるのである。Main()」が実際のMainメソッドである。続いては、メソッドについて解説を行おう。■メソッドを定義するには?メソッドとは、簡単にいうと、右から入力を受け取り、左へ出力するための、変換機のようなものだ。現実世界の例でいえば、お金(入力)を受け取り、ジュースを返すための、自動販売機のようなものである。自動販売機では、お金(入力)を受け取り、ジュース(結果としての出力)を返す。図では処理は、左から右に進むのが一般的だが、以後の解説の都合上、右から左に記述している。これをプログラミング世界のメソッドで表すと、次のようになる。プログラミングの世界のメソッドの定義(C#)プログラミングの世界のメソッドでは、パラメータ(入力)を受け取り、戻り値(結果としての出力)を返す。右の入力は「パラメータ(引数:ひきすう)」と呼ばれ、メソッドによってその数は変わる。左の出力は「戻り値」と呼ばれ、必ず1個か0個になる。戻り値が0個(=何も出力しない)の場合は、C#では「void」と表記すればよい(「なし」という意味。「ボイド」と発音する。VBで「なし」の場合は戻り値を省略する)。スコープ内で行われる。Main()」となっているので、パラメータは0個で(=省略されていて)、戻り値は「void」(=なし)である。次に定義済みのメソッドを使用する方法を簡単に紹介しておこう。■定義済みのメソッドを使用するには?先ほどの解説では、メソッドを定義する方法を示した。次に定義済みのメソッドを使用する方法を簡単に紹介しておこう。いっても難しくはない。メソッドの使用パターンは、次の図のパターン1のように「処理結果である戻り値を変数に代入するか」、パターン2のように「戻り値を無視するか(結果は不要で、メソッドの処理だけを実行するか)」の2通りしかない。プログラミングの世界におけるメソッドの使用方法(C#)定義済みのメソッドを使用する方法は、「処理結果である戻り値を変数に代入するか」、パターン2のように「戻り値を無視するか(結果は不要で、メソッドの処理だけを実行するか)」の2通りしかない。上の図にある変数の型とは、変数の種類(例えば、数値、文字例、Windowsフォーム、ボタン・コントロールなどのクラスの種類)のことである。変数とは、値(=データ)を格納するための領域(=データを格納する箱のようなもの)である。num;」と記述した場合、int型(=数値型)のnum変数ということになる。パラメータ2......)は「パラメータ1、パラメータ2の入力を渡してDoSomeWorkメソッドの処理を行わせ、その処理結果を戻り値として受け取って(変数の型の)変数に代入する」という意味になる。メソッドの最後にある「;(セミコロン)」は、C#でプログラム上の1文(1ステートメント)を区切るためのキーワードである。1行に「;」を複数記述すれば、1行内に複数の文を記述できるし、複数行の最後に「;」を1つ記述されば、複数行に1つの文を記述できる(VBは改行により1文を区切るため、常に「1行=1文」となる。改行の最後に「_」を付加して連結すれば、VBでも複数行にまたがる1文を記述することは可能)。今回はここまでにしよう。オブジェクト指向プログラミングの基礎部分を簡単に説明したが、これについて詳しく解説することは本連載の趣旨からはずれるので、「オブジェクト指向プログラミング超入門」などを読んで、次回までによく理解しておいてほしい。次回はMainメソッドの処理内容から、プログラム全体のコード内容までを一通り解説する。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。