Comment éviter l'erreur "constructeur sur le type 'MyType' introuvable " lors de l'héritage d'une classe de base

J'ai une application Visual Studio 2010 Windows Forms qui inclut une classe de base de formulaire que les autres classes hériteront. Le constructeur de la classe de base prend un paramètre que les classes enfants passeront à la classe de base.

Exemple:

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}

Le problème que je rencontre est que lorsque je tente d'ouvrir le ChildForm dans le mode D'affichage de conception de VisualStudio, je reçois l'erreur suivante:

Constructeur sur le type ' MyProject.La classe baseform' pas trouver.

Remarque: indépendamment de l'erreur, le projet compile et fonctionne correctement.

Je peux éviter l'erreur si je surcharge le constructeur avec un constructeur qui ne contient aucun paramètre.

Exemple: (cela élimine l'erreur)

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }

    public BaseForm()
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}

Ma question Est, Comment puis-je créer une classe de base qui n'inclut pas un constructeur sans paramètre et éviter L'erreur de vue de conception?

22
demandé sur Jed 2013-05-02 00:32:22

1 réponses

C'est complètement impossible.

Le formulaire que vous voyez dans la vue de conception est une instance réelle de votre classe de base.
S'il n'y a pas de constructeur par défaut, le concepteur ne peut pas créer cette instance.

Vous pouvez marquer le constructeur avec le [Obsolete("Designer only", true)], et lui faire lancer une exception s'il est appelé lorsqu'il n'est pas dans le concepteur, pour empêcher d'autres personnes de l'appeler.

30
répondu SLaks 2013-05-01 20:34:01