連載
» 2015年09月15日 05時00分 公開

連載:簡単! Visual Studio 2015入門:第4回 Visual Studio 2015のひな型コードを理解する (2/4)

[かわさきしんじ,Insider.NET編集部]

Application.Runメソッドの理解

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

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

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

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

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

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

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

Windowsアプリの残りのひな型コード(Form1.csファイル)

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

……前略……
namespace WindowsFormsApplication1
{
  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 2015によって自動的に書き込まれる。そのため、(人が勝手に編集すると、VS 2015が読み取れなくなってしまう可能性があるので)通常、開発者はこのファイルを編集すべきではない。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();
}

Form1クラスのコンストラクター

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

Copyright© 1999-2018 Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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