第3回 Visual Studio .NETのひな形コードを理解する連載簡単!Visual Studio .NET入門(3/6 ページ)

» 2004年08月11日 00時00分 公開

クラスのインスタンスが生成されるきっかけとなる「エントリ・ポイント」

 以上で、ひな形コードには、WindowsApplication1名前空間のForm1クラスという要素があることが分かった。このForm1クラスは第1回で実行した.NETプログラムのウィンドウ の「元の姿」である。つまりソース・コードは、実体そのもの(=ウィンドウ )ではなく、実体を構築するための設計図(=元の姿)でしかない。

 例えば現実世界では、DNAという設計図に基づいて実体(=人間)が生まれる。それと同じように、プログラミングの世界でも、クラスのコードという設計図に基づいて実体(=インスタンス)が生成されるのである(なお、「クラスのインスタンス」として生成されたものが「オブジェクト」なので、覚えておいてほしい)。

 現実世界の人間を最初に創造したのは誰か分からないが、ここでは便宜上「創造者」としておこう。プログラミングの世界では、この創造者が誰かということは、はっきりしている。クラスという設計図からオブジェクトを作り出す創造者は、Windowsシステムである。

 しかし、Windowsシステムがすべてのオブジェクトを作り出すわけではない。ただ単に、そのきっかけを作っているだけである。きっかけが作られた後は、あるオブジェクトが次々に新しいオブジェクトを作成していき、最終的にそれらのオブジェクト同士の結び付きややり取りによってプログラム全体が実行されることになる。これは現実世界で、人間が人間を生んでいき、最終的にそれらの人間同士の結び付きややり取りによって社会全体が回っていくことに似ている。

 プログラミングの世界では、これらのオブジェクトが生誕する最初のきっかけとなる場所は、「エントリ・ポイント」と呼ばれる

プログラム実行のきっかけとなるエントリ・ポイント
エントリ・ポイントをきっかけとして、クラスという設計図からオブジェクトが作成され、最終的にプログラム全体が実行される。

アプリケーションのメイン・エントリ・ポイント「Mainメソッド」

 C#のエントリ・ポイントは「Mainメソッド」である(メソッドについては後述)。C#では常にMainメソッドがエントリ・ポイントとなるので、プログラム内に最低1つのMainメソッドが必要となる(なおVB.NETでは、このMainメソッドを省略することもできるが、その際には暗黙的にプログラム内にMainメソッドが作成される)。

 次のコードを見ると、確かにForm1クラスの中にもMainメソッドがあるのが確認できる。

……前略……
namespace WindowsApplication1
{
  /// <summary>
  /// Form1 の概要の説明です。
  /// </summary>
  public class Form1 : System.Windows.Forms.Form
  {
    ……中略……
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main()
    {
      ……中略……
    }
  }
}

ひな形ソース・コードの中のエントリ・ポイントであるMainメソッド
アプリケーションには1つ以上のエントリ・ポイントが必要である。

 上記コードを見れば分かるように、C#でのMainメソッドの書き方は、次のとおりだ。

[STAThread]
static void Main()
{
  ……中略……
}

 まず「[STAThread]」という記述は、.NET以前からのマイクロソフト・テクノロジであるCOM(Component Object Model)のための設定である。メソッドの前に、[ ](角カッコ)で記述されるコードは「属性」と呼ばれる.NET言語特有の機能である(詳しくは、改訂版C#入門の「実行時に参照可能な属性」、もしくはプロフェッショナルVB.NETプログラミングの「属性」を参照していただきたい)。

 現段階で、このSTAThread属性の意味を正しく理解する必要はないが、MainメソッドにはSTAThread属性が必要なことは覚えておいてほしい(なおVB.NETの場合は、暗黙的にSTAThread属性が設定されるので、必ずしも記述する必要はない)。

 次に「static」というキーワードがある。C#では、このstaticキーワード(VB.NETではSharedキーワード)で修飾されたメソッドは静的メソッドと呼ばれ、クラスの実体(つまりオブジェクト)がなくても呼び出すことができる。一方、静的メソッド以外のメソッドは、メソッド呼び出しするためには、必ずそのメソッドが所属するクラスのオブジェクトが必要になる(詳細後述)。

 Mainメソッドは、オブジェクトを作成するためのきっかけとして呼ばれるもので、それが呼ばれる時点では、オブジェクトが1つも存在していない。よって、オブジェクトなしでメソッドへのアクセスを可能にするstaticキーワード(VB.NETではSharedキーワード)が必要になるのである。

 staticキーワードの次の「void Main()」が実際のMainメソッドとなる。続いては、メソッドについて解説を行おう。

メソッドを定義するには?

 メソッドとは、簡単にいうと、右から入力を受け取り、左へ出力するための、変換機のようなものだ。現実世界の例でいえば、お金(入力)を受け取り、ジュースを返すための、自動販売機のようなものである。

現実世界の自動販売機
現実世界の自動販売機では、お金(入力)を受け取り、ジュース(結果としての出力)を返す。なお座標軸では、左から右に進むのが一般的だが、以後の解説の都合上、右から左に記述している。

 これをプログラミング世界のメソッドで表すと、次のようになる。

プログラミングの世界のメソッドの定義(C#)
プログラミングの世界のメソッドでは、パラメータ(入力)を受け取り、戻り値(結果としての出力)を返す。

 右の入力は「パラメータ(引数:ひきすう)」と呼ばれ、メソッドによってその数は変わる。左の出力は「戻り値」と呼ばれ、必ず1個か0個になる。戻り値が0個(=何も出力しない)の場合は、C#では「void」と表記すればよい(「なし」という意味。「ボイド」と発音する。VB.NETで「なし」の場合は戻り値を省略する)。メソッドの実際の処理は、先ほどのクラスや名前空間と同じように { 〜 } のスコープ内で行われる。

 Windowsアプリケーションのひな形コードのMainメソッドは、「void Main()」となっているので、パラメータは0個で(=省略されていて)、戻り値は「void」(=なし)である。

 次に定義済みのメソッドを使用する方法を簡単に紹介しておこう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。