無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

C#をつつく29−部分型。コード合体♪

今回は部分型をつつくピヨ♪部分型はVSを使っている人ならばおなじみだと思うピヨ♪C#でWindowsフォームアプリケーションを作ると次の様なコードが作成されるよね?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form //この行に注目
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}


もう分かったと思うけど一応囀るピヨ。

partial class クラス名

と打つと部分型を宣言したことになるピヨ♪じゃあ他のファイルがどこにあるのかというと、VSのソリューシュンエクスプローラで、左から2つ目にある「全てのファイルを表示」とチップで表示されるボタンをクリックしてから、ソリューシュンエクスプローラ上にあるForm1.csの+をクリックしてみよう。すると、Form1.Designer.csというファイル名が見つかるピヨね。このファイルを覗いてみよう。


namespace WindowsFormsApplication1
{
    partial class Form1
    {
        /// 
        /// 必要なデザイナ変数です。
        /// 
        private System.ComponentModel.IContainer components = null;

    //これ以降は長いので省略


見てのとおりこっち側もpartial class Form1って宣言されているピヨッ♪こんな具合に複数のファイルで一つの型を記述できるピヨ♪複雑な型を書いている時に便利かもね♪
これは一件単純な機能だけど、よく考えると幾つかの疑問が頭をよぎるピヨね。まず気になるのは1つのファイルで部分型を宣言した場合の事ピヨ。部分型というんだから、一つにしたら不味いのかな?疑問が出たら即実装!実際にやってみたピヨ♪


using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static partial class Program
    {
        /// 
        /// アプリケーションのメイン エントリ ポイントです。
        /// 
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}


さてどうなるのかな♪エラーもしくは警告が表示されるかな♪わく♪わく♪・・・
結果は、残念ながら何にも起こらなかったピヨォ。何かが起こることをちょっと期待したんだけど、まぁ部分型と宣言しておいて、1ファイルで記述しても問題は無いピヨ。一旦コンパイルしたい時もあるからね。
といっても問題ないのは、直ぐ後で違うファイルへ型を書く場合のみピヨ。ありふれた名前の型を無闇に部分型にしてしまうと偶然に一致してしまう事があるから、原則的にはpartialは書かないほうがいいピヨ。ある程度大きなプロジェクトで、偶然に複数のファイルに同じ型名があった場合の挙動が予測できなくなるから駄目ピヨ。とはいえ、同じ型名がある事自体が設計ミスなんだけど、設計ミスはありふれた事だから無理して書かないほうが無難ピヨ。
ちなみに、構造体とインターフェイスにも使えるピヨ。クラスだけじゃなくて、部分インターフェイス、部分構造体に出来るって事だね♪なるピヨ、だから部分型なんだね♪他にもつつきたいことは沢山あるけど、長くなりすぎるので次回へ続く♪
別窓 | C# | コメント:0 | トラックバック:0 | ∧top | under∨
<<はじめに | 無差別に技術をついばむ鳥 | LISPをつつく5−関数で代入。qじゃない関数もある♪>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |