フレッシュマン企画 連載
簡単!Visual Studio 2008入門

第4回 Visual Studio 2008のひな型コードを理解する

デジタルアドバンテージ 一色 政彦
2009/06/03
Page1 Page2 Page3 Page4

Application.Runメソッドの理解

 Application.Runメソッドは、その英語のメソッド名を見れば分かるように、「アプリケーション(=Application)を実行する(=Run)」ための処理を行っている。実際には、Application.Runメソッドでは、Windowsアプリケーションの「メッセージ・ループ(=メッセージ・ポンプ)」処理が行われる。

 メッセージ・ループとは、簡単にいえば、終了が呼び出されない限りずっと処理を実行し続けるための仕組みである。つまり、「Application.Run(new Form1());」というコードが実行するメッセージ・ループ処理では、Form1が終了しない限りずっとForm1の処理を実行し続けるということになる。もしForm1が終了すれば、それによりApplication.Runメソッド(=メッセージ・ループ処理)が終了する。Mainメソッド内には、ほかに実行するメソッドはないので、ここでアプリケーション自体が終了となる。

 Windowsアプリケーションの実行を正しく理解するには、Windowsのメッセージ・ループの仕組みについてもよく知っておく必要があるので、ここでもう少し詳しく解説しておこう。

 Windowsのアプリケーションの実行は、Windowsメッセージ(=処理実行の単位)を順次処理することでアプリケーションの実行を実現する。例えば次の3つのメッセージを順番に処理することで「アプリケーション画面の表示」という処理が実現できる(説明の便宜上、メッセージ内容は簡略化している)。

  1. アプリケーションの画面を作成するためのメッセージ
  2. 作成された画面を表示するためのメッセージ
  3. 表示された画面を描画するためのメッセージ

 これら3つのメッセージは、メッセージ・キューと呼ばれるメッセージ処理の順番待ちリストに追加される(キューの概念はこのリンク先を参考にしてほしい)。メッセージ・ループは、キューにたまったメッセージ・リストを定期的に参照して、メッセージがあれば古いものから順番に取り出して1つずつ処理する。身近な例でいえば、Outlook Expressなどのメーラで、古いメールから1件ずつ読んでいくところを想像してみるとよいだろう。

 このようにWindowsのメッセージ・ループでは、メッセージ・キューにたまる順番待ちのメッセージ・リストを、ループしながら(=一定間隔で)ひたすらチェックして、メッセージが来たら1件ずつそのメッセージを処理する。このメッセージ・ループ処理こそが、Windowsアプリケーションを動作させる基盤となる仕組みである。

Windowsアプリケーションの残りのひな型コード(Form1.cs)

 以上で、アプリケーションの骨格となる仕組みを解説したことになる。最後に、残りのコードを簡単に解説していこう。次のコードを参照してほしい。これはForm1.csファイルの内容である。

……前略……
namespace WindowsApplication1
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
  }
}
Windowsアプリケーションのひな型コードの残りの部分(Form1.cs)

 「public partial class Form1 : Form」については、前回説明した内容を理解していれば意味は大体分かるだろう。基底クラスとして指定されている「Form」はSystem.Windows.Forms名前空間が省略されている。ここで説明していないのは、「partial」というキーワードだけだ。

 このpartialキーワード(VBではPartialキーワード)は「部分クラス(Partial Class)」と呼ばれる.NET Framework 2.0の機能で、クラスを複数のファイルに分割する機能である。要するに上記コードは「Form1クラスを分割して、その一部を別のファイルに格納している」という意味になる。ここで実際に、分離したクラスの一部が格納されているファイルは「Form1.Designer.cs」である。

 Form1.Designer.csファイルには、Windowsフォーム・デザイナで編集した内容のみが、VS 2008によって自動的に書き込まれる。そのため、(人が勝手に編集すると、機械であるVS 2008が読み取れなくなってしまう可能性があるので)通常、開発者はこのファイルを編集すべきではない。Windowsフォーム・デザイナが扱うファイルは拡張子が「.Designer.cs」(VBでは「.Designer.vb」)となるので、そのファイルは(参照するだけで)編集はしないように気を付けてほしい。

 Form1.Designer.csファイルについて詳しくは、後で取り上げる。ここではForm1.csファイルの内容について続けて説明しよう。

Form1コンストラクタでの初期化処理

 Form1.csファイルのForm1クラスには、次のメソッドがある。

メソッド:public Form1()

 このメソッドは、前述したnew演算子付きのメソッドで呼び出されるコンストラクタである(VBでは「Public Sub New()」というメソッド名になる)。

 なお、コンストラクタ・メソッドの前に付いている「public」は、前回も説明したアクセシビリティ(=アクセス制御)を指定するための修飾子である。アクセシビリティは、クラスだけでなく、変数やメソッドも修飾することができる。public修飾子(VBではPublic修飾子)のほかにも、一部のクラスだけアクセス可能にするprotected修飾子(VBではProtected修飾子)や、ほかのクラスからは一切アクセスできないようにするprivate修飾子(VBではPrivate修飾子)などがある。

 このコンストラクタには、一般的にそのクラスに必要な初期化処理(=前処理。例えば、変数に最初の値を代入する処理や、クラス作成時に実行しなければならない処理)を記述する。このコードでは、次のコードにあるようにInitializeComponentメソッドを呼び出しているだけである。

public Form1()
{
  InitializeComponent();
}

 しかしこのInitializeComponentメソッドはForm1.csファイルに記述されていない。ここで、先ほどの部分クラスが必要になる。InitializeComponentメソッドはForm1.Designer.csファイルに記載されているのだ。そこで次にForm1.Designer.csファイルのコード内容を見てみることにしよう。


 INDEX
  [フレッシュマン企画 連載]簡単!Visual Studio 2008入門
  第4回 Visual Studio 2008のひな型コードを理解する
    1.Mainメソッドの内容の理解
  2.Application.Runメソッドの理解
    3.Windowsフォーム・デザイナで生成されたコード
    4.ひな型コード全体の流れ

インデックス・ページヘ  「簡単!Visual Studio 2008入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間