![]() |
フレッシュマン企画 連載
|
|
|
今回は、前回に引き続き、Visual Studio 2005(以降、VS 2005)でWindowsアプリケーションのプロジェクトを新規作成したときに自動生成される初期コード(以降、ひな型コード)を見ながら、Mainメソッドの処理内容から、プログラム全体のコード内容までを一通り解説する。
■Mainメソッドの内容の理解
まずは、Mainメソッドの処理内容について見ていくことにしよう。前回も示したが、MainメソッドはProgram.csファイルの中にある。
|
|
| エントリ・ポイントであるMainメソッドの処理内容 | |
| Mainメソッドのスコープを参照すると、「Application.Run(new Form1());」という1文がある。これがMainメソッドのキモとなる処理内容である。なお、「static class Program」については前回説明した。 |
Mainメソッドのスコープを見ると、まず次のような文がある。
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
これらの文の詳細な説明は(.NET初学者には不要と思われるので)割愛するが、何のためのコードか分からないとすっきりしないと思うので、その意味だけを簡単に述べておく。
「Application.EnableVisualStyles();」はボタン、テキストボックスなどのコントロールやウィンドウをWindows XPスタイルの外観に変更するためのものである(詳しくは「.NET TIPS:WindowsアプリケーションをWindows XPスタイルの外観にするには?」を参照)。
一方、「Application.SetCompatibleTextRenderingDefault(false);」はWindowsフォーム上のコントロールなどにテキストを描画する既定(=デフォルト)の方法を切り替えるためのもので、このコードのようにパラメータ(=入力)にfalseを指定して呼び出すと、よりパフォーマンスに優れたテキスト描画を行ってくれる*1。
| *1 .NETでは「GDI+」というWindowsの新しい描画エンジンに対応したライブラリが導入されたが、これにはパフォーマンスなどに問題があったため、VS 2005ではこれに加えて、以前のWindows標準エンジンである「GDI」もサポートされるようになった。上記のコードによって、GDI+のパフォーマンス問題を回避してGDIによるテキスト描画が行われるが、その半面、メソッド名の「Compatible Text Rendering」(=互換性のあるテキスト描画)が「false」と指定されることで、テキスト描画に関してVS 2005以前のVisual Studio .NET 2002/2003との互換性がなくなるので、注意が必要である。 |
続いて次の1文がある。
Application.Run(new Form1());
実はこの1文では、2つのメソッドが1つに組み合わされて使用されている。これを2つに分解すると、次のようになる。
(1) Application.Run(<オブジェクト>)
(2) <オブジェクト> = new Form1()
メソッドが実行される順番は、(1)のパラメータ部分に当たる(2)が先に実行され、次に(1)が実行される。よって、この順番で解説していこう。
まず(2)は、Form1クラスのインスタンスを作るためのメソッドである(前回説明した「メソッドの使用パターン1」のケース)。ただしこのメソッドは、次の2点で普通のメソッドとは異なる特殊なメソッドである。
- メソッド「Form1()」の前にnewが追加されている
- クラス名(Form1)と同じメソッド名(Form1())が使われている
「new <クラスの名称>()」という構文のように、先頭にnew演算子(VBではNew演算子)が付くメソッドはクラスのインスタンスを作成するためのもので、このようなメソッドは「コンストラクタ」と呼ばれる。実はオブジェクト指向では、このコンストラクタ・メソッドこそがオブジェクトを生成するための仕組みである。
Windowsアプリケーションのひな型コードでは、アプリケーション実行のきっかけとしてMainメソッドが呼ばれ、最初にこのForm1コンストラクタでForm1オブジェクトが作成される。その後はこのForm1オブジェクトからさまざまなオブジェクトを生成して、アプリケーションが動作するというわけである(前回も図解で説明した)。
次に(1)の「Application.Run(<オブジェクト>)」メソッドは、(2)で生成されたForm1オブジェクトをパラメータ(=入力)として受け取っている。戻り値はvoid(=なし)なので*2、Runメソッドの戻り値は無視している(=どこにも代入していない。前回説明した「メソッドの使用パターン2」のケース)。
| *2 メソッドの戻り値について調べるには、通常、VS 2005のヘルプであるMSDNライブラリを参照するが、その参照方法については次回以降で詳しく説明する。上記のApplication.Runメソッドについては、オンライン版MSDNの「Application.Run メソッド (Form)」を参照するとよい。 |
このApplication.Runメソッドも、Mainメソッドと同じく静的メソッドである。つまり、オブジェクトがなくてもメソッドを呼び出すことができる。それでは、「.」で接続された「Application」はオブジェクトではないのか? という疑問を持つ読者がいるかもしれない。
しかし、この「Application」はオブジェクトではなく、クラスである。つまり、「Application.Run(<オブジェクト>)」というコードは、ApplicationクラスのRunメソッド(静的メソッド)を呼び出しているということである。このコードで使われている静的メソッドの呼び出し形式を構文としてまとめると、次のようになる。
<クラス名>.メソッド名(パラメータ);
一方、クラスのオブジェクトを経由して、動的メソッド(=静的メソッド以外のメソッド)を呼び出す形式を構文としてまとめると、次のようになる。
変数の型 オブジェクト変数 = new <クラス名>();
オブジェクト変数.メソッド名(パラメータ);
つまり、通常のメソッドでは必ずコンストラクタでオブジェクトを生成してから、生成されたオブジェクトを経由してメソッドを呼び出す必要がある。それに対し、静的メソッドの呼び出しではオブジェクトを生成せずに、クラスの中のメソッドを直接呼び出すことになる。よって、静的メソッドであるRunメソッドは、Application.Run(<オブジェクト>)という呼び出し形式になっている。
このApplicationクラスは、.NETのクラス・ライブラリに用意されているクラスで、System.Windows.Forms名前空間にある。しかし、上の「Application.Run(<オブジェクト>)」というコードでは、「System.Windows.Forms.Application」のように名前空間を付けずに呼び出している。このように名前空間なしでクラスが呼び出せる理由は、使用するクラスの名前空間が事前に宣言されているからだ。具体的には、ソース・コードの先頭に次の記述があるためである。
C#では、usingディレクティブ(VBの場合はImportsステートメント)を使って、クラスが所属する名前空間の宣言を「using <名前空間>;」の形式でコードの先頭にあらかじめ記述しておくことで、名前空間を省略してそのクラスが使えるようになる。
Windowsアプリケーションのひな型コードでは、System.Windows.Forms名前空間だけでなく、さまざまな名前空間が宣言されている。これらの名前空間とその内容を次の表にまとめた(ただし、表の内容欄に書かれている用語の説明は割愛させていただく)。
| 名前空間 | 内容 |
| System | データ型、イベント、インターフェイス、属性、処理例外を定義する基本的なクラスが含まれている名前空間 |
| System.Collections.Generic | リスト、キュー、ディクショナリなど、オブジェクトのさまざまなコレクションを定義するインターフェイスとクラスが含まれている名前空間 |
| System.Windows.Forms | Windowsアプリケーションを作成するためのクラスが含まれている名前空間 |
| System.ComponentModel | コンポーネントとコントロールの実行時およびデザイン時の動作を実装するためのクラスが含まれている名前空間 |
| System.Data | データベースやXMLの処理を行うためのクラスが含まれている名前空間 |
| System.Drawing | グラフィックス機能を使うためのクラスが含まれている名前空間 |
| System.Text | 文字列を操作するためのクラスが含まれている名前空間 |
| ひな型コードに追加されるusingディレクティブによる名前空間の宣言(C#) | |
なお、ここまでの説明で、冒頭にあった「Application.EnableVisualStyles();」と「Application.SetCompatibleTextRenderingDefault(false);」も、System.Windows.Forms名前空間Applicationクラスの静的メソッドであることが分かっただろう。
それでは次に、このApplication.Runメソッドは実際にはどのような処理を行っているかについて解説しよう。
| INDEX | ||
| [フレッシュマン企画 連載]簡単!Visual Studio 2005入門 | ||
| 第4回 Visual Studio 2005のひな型コードを理解する | ||
| 1.Mainメソッドの内容の理解 | ||
| 2.Application.Runメソッドの理解 | ||
| 3.Windowsフォーム・デザイナで生成されたコード | ||
| 4.ひな型コード全体の流れ | ||
| 「簡単!Visual Studio 2005入門」 |
ホワイトペーパー(TechTargetジャパン)
- .NET TIPS - .NET開発のテクニックとヒント集 - (2010/3/18)
− GridViewコントロールを階層表示させるには?
− Windowsフォームのボタンに画像を表示するには?
− C#でnullチェックを簡潔に行うには? - Chapter15:LINQとクエリ式 (2010/3/17)
C# 3.0の目玉機能であるLINQについて、さまざまな記述例を交えながら徹底解説。書籍『[完全版]究極のC#プログラミング』より転載 - VBラムダ式 基礎文法最速マスター (2010/3/16)
今度はVB。ラムダ式の基礎文法を、短い説明と簡単なコードでまとめる。「ラムダ式、どう書くんだっけ?」という場合の簡易リファレンスとして活用できる - ASP.NET MVC 2がリリース (2010/3/15)
ASP.NET MVC 2の正式版(VS 2008のASP.NET 3.5向け、VS 2010には標準で含まれる予定)のリリースについてのお知らせ
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







