@IT や GDNJ でも議題に上がった「継承フォームを使うと Visual Studio のデザイナで開けない」という問題に関して。
@IT
GDNJ
[BUG] 継承フォームを Windows フォーム リソース エディタで開けない
リソースの問題はとりあえず置いておいて、問題は継承ツリーに抽象クラスがあった場合。
Windows フォーム、Web フォームとも同様。
Windows フォームの場合は、
System.Windows.Forms.Form ← MyBaseForm ← Form1
という関係になっていた場合、MyBaseForm が抽象クラスだとデザイナで開けない。
Web Form の場合は、
System.Web.UI.Page ← MyBasePage ← Default.aspx.cs ← Default.aspx(自動生成クラス)
という関係になっていた場合、MyBasePage が抽象クラスだとデザイナで開けない。
何故なのか。
デザイナで対象ファイルの編集を開始しようとするとき、Visual Studio は対象ファイルをインスタンス化して、デザイナを開いているわけではない(らしい)。
何故なら、これから編集しようとしているのに、そのクラスをインスタンス化なぞできないからである。なので、対象ファイルの親をインスタンス化して、デザイナ画面を形作っている。
このときにその親クラスが抽象クラスであると、Visual Studio もインスタンス化できないので、デザイナ画面が開かない、というわけだ。
しかし、共通の親フォームなんかは、概念的には抽象である事が多いのではないのだろうか。
この問題を避けるために、抽象である事をやめるのは、何か釈然としないものがある。