アプリケーションのエントリポイントとは、アプリケーションを開始した時、はじめに実行される場所のことです。コンソールアプリケーションやWindowsフォームアプリケーションには必ずエントリポイントが存在しますが、Visual Studioを使っている場合はエントリポイントが自動的に作成されますので、普段は特に意識する必要がありません。しかし、エントリポイントの知識が必要になるケースは意外と多いです。ここでは、Windowsフォームアプリケーションにおけるエントリポイントの説明と、エントリポイントを自分で作成する方法を紹介します。
補足:正確には、エントリポイントはエントリポイントメソッドの先頭ですが、ここではエントリポイントメソッドのことをエントリポイントと呼ぶことにします。
まずは、Visual StudioでWindowsフォームアプリケーションのプロジェクトを新規作成した直後の、既定のエントリポイントについて確認しておきましょう。
VB.NETでは、Mainメソッド(またはプロシージャ)がエントリポイントです。ところが、Windowsフォームアプリケーションプロジェクトのどこを探してもMainメソッドがありません。エントリポイントとなるMainメソッドは、コンパイラによって自動的に作成されます。
補足:自動的に作成されるMainメソッドは、Visual Studio 2005以降でアプリケーションフレームワークを有効にしているならば、MyApplicationクラスに作成されます。それ以外では、フォームクラスに作成されます。
C#では、Mainメソッドがエントリポイントです。Mainメソッドが作成される場所は、Visual Studio 2003以前とVisual Studio 2005以降で異なります。
Visual Studio 2005以降では、Program.csファイルのProgramクラスにMainメソッドが作成されます。コードは、次のようなものです。
/// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }
Visual Studio 2003以前では、フォームクラス(Form1クラス)にMainメソッドが作成され、これがエントリポイントになります。そのコードは、次のようなものです。
/// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); }
これらのコードは、Visual Studioのデザイナが管理しているコードに当たりませんので、ユーザーが直接書き換えても問題ありません(もちろん正しいコードを書く必要はありますが)。よって、C#では新たにMainメソッドを作成しなければならないケースはほとんど無いでしょう。
エントリポイントにするMainメソッドを記述する場所はどこでも構いませんが、新たにMainメソッドを作成するのであれば、新しいクラスを作成し、そこに記述をするのが分かりやすいでしょう。
VB.NETの場合は、プロジェクトに新しいクラスかモジュールを追加します。メニューの「プロジェクト」-「新しい項目の追加」で追加できます。そしてそこにSub Mainを記述します。
以下はSub Mainをモジュールに記述したときの例です。
Module Program <STAThread()> _ Sub Main() Application.Run(New Form1()) End Sub End Module
以下はSub Mainをクラスに記述したときの例です。
Public Class Program <STAThread()> _ Shared Sub Main() Application.Run(New Form1()) End Sub End Class
なお、.NET Framework 2.0以降では、次のようにEnableVisualStylesやSetCompatibleTextRenderingDefaultも記述した方がよいでしょう。(以下は、モジュールの例のみです。)
Module Program <STAThread()> _ Sub Main() Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) Application.Run(New Form1()) End Sub End Module
C#の場合は、新しいクラスをプロジェクトに作成して、静的なMainメソッドを記述します。Mainメソッドのコードは、前述したVisual Studioが作成するコードをそのまま使えばよいでしょう。
新しく作成したMainメソッドをエントリポイントにするには、エントリポイントを変更する操作が必要です。エントリポイントを変更する方法は、「アプリケーションが始まるときに呼び出す位置(エントリポイント)を変更する」で説明します。
蛇足ですが、気になる方のために、上に示したコードの説明をします。
Application.Runメソッドについては、こちらで説明しています。STAThreadAttribute属性の必要性については、こちらで説明しています。
Application.EnableVisualStylesは、コントロールをビジュアルスタイルで表示するためのものです。この説明は、「コントロールの外観をビジュアルスタイル(XPスタイル)にする」で行っています。
Application.SetCompatibleTextRenderingDefaultは、コントロールのテキストをGDIでレンダリングするためのものです。詳しくはこちらをご覧ください。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。