0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デザイナーで抽象クラスを継承したフォームクラスを開こうとしたら「インスタンスを生成できない」と怒れた時の対処法

Last updated at Posted at 2023-10-14

発生問題

以下のコードのように抽象クラスを継承する。

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で分岐しています。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?