ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

C#のフォームクラスはファイルの先頭に書かなくてはいけない

C#(というより.NET Framework)のフォームクラスはその.csファイルの最初のクラスでなくてはいけないというルールがあります. このルールが守られていない場合、フォームデザイナーを開くと「クラスFormXXはデザイン出来ますが、ファイルの最初のクラスではありません。... デザイナーを再度読み込んでください。」というエラーが出ます。エラーの内容は.NET FrameworkVisual Studioのバージョンによって多少変わるかもしれません.

具体的には以下のソースコードではフォームデザイナーでエラーが出ますがビルドは出来ます.

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

namespace WindowsFormsApp
{
    // このファイルの最初のクラス
    public partial class MyClass
    {
    }

    // このファイルの2番目のクラス
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}


次のソースコード名前空間こそ最初ではないですがクラスは最初のクラスなのでエラーが出ません. ただしたまにデザイナーにより生成されたコードがバグるのでやめた方が良いです.

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

namespace MySpace
{
}

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}


結局のところフォームクラスは最初の名前空間の最初のクラスとして定義するのがベストっぽいです.