Page4■Windowsフォーム・デザイナで生成されたコード(Form1.Designer.cs)次のコードはForm1.Designer.csファイルの内容である。必要なデザイナ変数です。使用中のリソースをすべてクリーンアップします。サポートに必要なメソッドです。エディタで変更しないでください。InitializeComponent(){......中略......}#endregion}}}Windowsアプリケーションのフォーム・デザイナ用のコード(Form1.Designer.cs)Form1.Designer.csファイルに部分クラスとして定義されたForm1クラスには、1つのフィールド変数と3つのメソッドがある。<コメント>」〜「#endregion」の部分は「アウトライン機能」と呼ばれ、コードを折り畳んで非表示にすることが可能な場所である。TIPS:VS.NETでソース・コードを見やすくするには?」を参照していただきたい。Form1.Designer.csファイルに部分クラスとして分離されたForm1クラスには、次のような変数(「フィールド変数」とも呼ばれる)とメソッドがある。InitializeComponent()このように、先ほどのForm1.csファイルのForm1クラスのコンストラクタで呼び出されていたInitializeComponentメソッドは、Form1.Designer.csファイルに部分クラスとして分離されたForm1クラス内にあることが分かった。System.Windows.Forms.Form」)は省略可能だ*3。部分クラスとして分離されたクラスのどれか1つにアクセス修飾子と基底クラスの宣言が含まれていれば、そのほかのクラスではこれらを省略できる。本稿で説明するWindowsアプリケーションのひな型コードの例では、Form1.csファイルのForm1クラスの方にアクセス修飾子と基底クラスが宣言されているので、Form1.Designer.csファイルのForm1クラスでは省略可能となる。それでは、これらのフィールド変数やメソッドについて、個別に解説していこう。●(1)のcomponents変数(1)の「components」変数はクラス内で使用されるフィールド変数で、コンポーネントを管理するためのものだ(「コンテナ」と呼ばれる)。-」を参照してほしい。null;ここではcomponents変数に「null」が代入されているが、(3)で説明するInitializeComponentメソッドの中に、次のようなコードが自動的に生成されるため、ほぼ初期状態のContainerオブジェクト(System.ComponentModel名前空間)がcomponents変数に格納されることになる。System.ComponentModel.Container();このcomponents変数は、次に説明する「(2)のDisposeメソッドで終了処理」で使用される。)」では、終了処理(=後処理。不要なデータを破棄する処理やクラス終了時に実行しなければならない処理)を記述する。ここでは、初期化処理はコンストラクタ、終了処理はDisposeメソッドで行うと、対にして覚えておけばよい(終了処理については下のコラムを参照)。【コラム:ファイナライザ(=デストラクタ)について】コンストラクタの正反対の処理を行うためのメソッドは、ファイナライザ(「デストラクタ」とも呼ばれる)である。.NETでは、ガベージ・コレクション機能(=メモリを自動的に管理するための.NETの機能で、これによって.NETではメモリ・リークが発生しにくくなっている)があるため、ファイナライザを呼び出すタイミングが不確定になっている。そこで、終了処理を明示的に行えるものとしてDisposeメソッドが用意されている。このDisposeメソッドを明示的に呼び出せば、確実にその場で終了処理が実行できる。暗黙的に終了処理を行うためには(つまり、ガベージ・コレクション機能に自動的に後処理を行わせるには)、Disposeメソッドではなくファイナライザを実装することになる。Finalize()」というメソッド名になる)。TIPS:確実な終了処理を行うには?」を参照するとよい。Disposeメソッドでは、protected修飾子の次に、さらにoverride修飾子がある。Overrides修飾子)は、継承されたクラスでのみ使用できる修飾子で、基底クラスにあるメソッドを新しい派生クラスのメソッドで置き換えることを示すためのものだ。このひな型コードでは、「基底クラスであるFormクラス(System.Windows.Forms名前空間)のDisposeメソッドを、派生クラスであるForm1クラス(WindowsApplication1名前空間)のDisposeメソッドで置き換える」ということを示している。このようなメソッドの置き換えを、オブジェクト指向言語では、メソッドの「オーバーライド」と呼ぶ。Disposeメソッドの実装内容は次のようになっている。スコープのコードを実行する」という意味である。「&&」演算子は論理積を表し、日本語で表現するなら「かつ」という語句に当てはまる。B」は「AかつB」という意味になる。スコープのコードを実行する」という処理コードになる。「disposing」はDisposeメソッドのパラメータに指定されたbool型の変数(=bool値)である*4。null)」というコードだが、C#の「!=」比較演算子は「同じではない」を表すので(ちなみに「==」が「同じである」を表す)、このコードの意味は「componentsがnullと同じではない」となる。前述のとおり、components変数には(3)のInitializeComponentメソッドでContainerオブジェクトが代入されるので、「componentsがnullと同じではない」は「正しい(=true)」という結果になる。スコープのコードが実行されることになる。このDisposeメソッドのdisposingパラメータは、Disposeメソッドがユーザーのコードによって直接もしくは間接的に呼び出されたときにtrueとなり、共通言語ランタイム(=.NET実行エンジン)のファイナライザによって呼び出されたときにはfalseとなる。スコープのコードが実行されることになる。そのスコープ内には「components.Dispose();」というコードがあるが、これはcomponents変数の終了処理を行うために、さらにcomponents変数のDisposeメソッドを呼び出すコードである*5。Windowsフォーム・デザイナでコンポーネントを追加すると、コンテナであるcomponents変数にそのコンポーネントが登録される。そこで登録されたすべてのコンポーネントのDisposeメソッドは、ここのcomponents変数のDisposeメソッドの中から呼び出されるため、すべてのコンポーネントのリソース破棄などの後処理を漏れなく実行できるという仕組みになっている。);」は、基底クラスのDisposeメソッドを呼び出すコードである。前回の継承の説明でも述べたようにForm1クラスには、継承元となる基底クラスが存在する。その基底クラスのオブジェクトは「base」というキーワードにより参照できる(VBでは、「MyBase」というキーワード)。このキーワードは通常のオブジェクトのように「オブジェクト名.メソッド名」の形式で利用することができる。);」というコードは、「基底クラスにあるDisposeメソッドを呼び出す」という処理コードになる。InitializeComponent()」は、Form1.csに記述されたForm1クラスのコンストラクタから呼び出されるクラス内部専用(=private修飾子)のメソッドである。InitializeComponentメソッドの内容を見ると、次のようになっている。"Form1";}メソッドの中の最初の1行目は、前述の「(1)のcomponents変数」で説明した。System.Windows.Forms.AutoScaleMode.Font;」は、Windowsフォームやその中のコントロールのサイズを自動調整(=自動スケーリング)する際の基準を示すモードを指定する。代表的なモードには以下のものがある。この表を見ると、ここではフォント・サイズを基準にした自動スケーリングを行うモードを指定していることが分かる。"Form1";」は、Windowsフォームのタイトル・テキストを指定するためのコードで、ここでは「Form1」を指定している。この値を変更するには、前々回説明したWindowsフォーム・デザイナ画面で、[プロパティ]ウィンドウの[Text]プロパティを書き換えればよい。以上のようにInitializeComponentメソッド内では、Form1オブジェクト(=Windowsフォーム画面)の初期値を設定している。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。