プログラムファイルの構成

Visual C# で、新しいプロジェクトを作り、フォームの上にボタンをひとつだけ貼付け、そのボタンをダブルクリックして、イベントハンドラ button1_Click () を作成した時のプログラムファイルの構成を再度概観してみた。

ファイルは分割されているが、統合されて一本のプログラムリストとして扱われる。インクルード文でファイルを読み込むわけではないので、分割ファイル間の依存関係は namespace (名前空間)で判別される。

まずはファイルの依存関係。

Program.cs
  Form1.cs
    Form1.Designer.cs

名前空間の階層構造。

namespase Learn
{
  static class Program
  {
    [STAThread]
    static void Main() { Application.Run(new Form1()) }
  }

  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e) { ... }
  }

  public partial class Form1
  {
    private System.ComponentModel.IContainer components = null;
    protected override void Dispose(bool disposing) {}
    private void InitializeComponent() { ... }

    this.button1 = new System.Windows.Forms.Button();
    System.Windows.Forms.Button button1;
  }
}

どういう事を実行しているかというと、
1. System.Windows.Forms.Form クラスから導出して Form1 クラスを作る。
2. Form1 の上にボタンを作成し、ボタンのクリックをイベントハンドラと関連付ける InitializeComponent() メソッドを作る。
2. button1 ボタンが参照出来るように、フィールド button1 を作る
3. ボタンがClick された時のイベントハンドラ button_Click を定義する。
4. Learn.Program.Main() を呼び出す。
5. Learn.Program.Main() は、System.Forms.Application.Run() を呼び出す。
6. System.Forms.Application.Run は引数に Learn.Form1 のインスタンスを必要とするので new Form1() で作る。
7. Form1 クラスのコンストラクタ Form1() は Learn.Form1.InitializeComponent()
で、フォームのコンポーネントの初期化をする。
8. InitializeComponent() が実行されたら、Application.Run() の中でプログラムがイベント待ちの待機状態になる。

これだけのことをするプログラムがフォームデザイナで自動生成されていたので、イベントハンドラを記述するだけでプログラムが出来上がってしまうような、安易な印象を持ってしまったのだ。逆に言うとその分プログラム作成の効率が劇的に上がっている事になる。

C#のプログラムをスクラッチからつくるのは容易ではない。Visual C#でプログラムを作ると、定型的な部分はプログラムが作ってくれるので、プログラマの仕事はきちんと動くプログラムを改造するだけになる。しかし、どの部分の改造を自分がやっているのかは、自覚的しておく必要がある。

C# や .NET を全て理解してからプログラムを作ることは不可能ではないが事実上は無理なので、こういう自動作成されたプログラムの改造に頼らなければならないが、自動作成されたプログラムの不可解な部分をできるだけ少なくする努力は必要だろう。
[PR]
by tnomura9 | 2010-01-30 07:57 | C# | Comments(0)
<< 結局C#とはどういうものか イベントハンドラの引数 >>