発生問題
以下のコードのように抽象クラスを継承する。
SampleControlForm.cs
nameSpace SampleWinApp
{
public partial class SampleControlForm : AbstractControl
{
public AbstractControl()
{
IntializeComponet();
}
}
}
デザイナーを開こうとすると、以下のようなエラーが出てくる
デザイナーは型 'BaseControl`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=****]]' のインスタンスを作成しなければなりませんが、型が abstract として宣言されているため、作成できませんでした。
開発環境
c#6.0
.NET Framework4.6.2
原因
デザイナーを開く時に、抽象クラスのインスタンスを生成しようとしている。
解決策
Debug mode
で中間クラスを作成する。
AbstractControl
:スーパークラス
SampleControlForm
:サブクラス(デザイナーで開いたいフォームクラス)
Middle
:継承するために挟む中間クラス
SampleControlForm.cs
nameSpace SampleWinApp
{
#if DEBUG
public partial class SampleControlForm : Middle
#else
public partial class SampleControlForm : AbstractControl
#endif
{
public SampleControlForm()
{
IntializeComponet();
}
}
#if DEBUG
public class Middle : AbstractControl{}
#endif
}
AbstractControl.cs
nameSpace SampleWinApp
{
public abstract partial class AbstractControl : UserControl
{
public AbstractControl()
{
IntializeComponet();
}
}
}
補足
SampleControlForm.cs
#if DEBUG
public partial class SampleControlForm : Middle
#else
public partial class SampleControlForm : AbstractControl
#endif
RELEASEモード時には、中間クラスは必要ないので#else
で分岐しています。