web-dev-qa-db-fra.com

La méthode ou l'opération n'est pas implémentée

Il y a deux formes. Form2 est dérivé de Form1.

Mais j'ai un problème avec Form2 en mode conception, comme indiqué sur la capture d'écran ci-dessous.

Si je vais commenter cette this._presenter.Retrive(); cela fonctionnera bien. Que se passe-t-il et comment résoudre le problème?

UPD: Si je vais supprimer le lancer nouvelle NotImplementedException (); et insérera, par exemple, MessageBox.Show ("Test") ;, chaque fois que j'ouvrirai Form2, le MessageBox apparaîtra comme si j'avais lancé l'application.

 enter image description here

Form2

namespace InheritanceDemo
{
    public partial class Form2 : Form1
    {
        public Form2()
        {
            InitializeComponent();
        }
    }
}

Formulaire 1

namespace InheritanceDemo
{
    public partial class Form1 : Form
    {
        protected IPresenter _presenter;

        public Form1()
        {
            InitializeComponent();
            _presenter = new Presenters();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this._presenter.Retrive();
        }
    }

    public class Presenters : IPresenter
    {
        public void Retrive()
        {
            throw new NotImplementedException();
        }
    }

    public interface IPresenter
    {
        void Retrive();
    }
}
6
Mikhail Danshin

La principale cause d'erreur est ce que Fᴀʀʜᴀɴ ​​et Yuval a déclaré:

throw new NotImplementedException();

Mais il y a une autre chose importante à laquelle vous devriez faire attention.

OP: Si je vais supprimer le lancer nouvelle NotImplementedException (); et va insérez, par exemple, MessageBox.Show ("Test") ;, chaque fois que je vais ouvrir Form2 le MessageBox apparaîtra comme si j'exécutais l'application

Si vous remarquez, vous ne recevrez pas cette erreur dans le concepteur de Form1. Mais parce que votre Form2 hérite de Form1, vous recevez cette erreur.

En effet, lorsque vous ouvrez un formulaire dans le concepteur, celui-ci crée une instance de base class de votre formulaire pour afficher votre formulaire. Cela signifie qu'au lieu de créer une instance de Form2, il crée une instance de Form1, exécute le constructeur Form1 et l'héberge dans l'aire de conception, puis désérialise les codes dans InitializeComponent de Form2 et place des composants sur l'aire de conception.

C'est pourquoi vous recevez l'erreur lorsque vous voyez votre Form2 dans le concepteur, mais vous n'avez reçu aucune erreur lors de l'ouverture du Form1 dans le concepteur.

Résoudre le problème:

  • Vous pouvez supprimer l'implémentation et la laisser vide.
  • Vous pouvez également empêcher l'erreur en empêchant d'exécuter le code dans Form_Load et vous êtes en mode Création à l'aide de DesignMode property, dans Form1_Load:

    if (DesignMode) revenir;

Vous trouverez probablement ces réponses utiles et intéressantes:

11
Reza Aghaei

Que se passe-t-il et comment résoudre le problème?

C'est assez trivial. Si vous pouviez déboguer votre code, vous verriez que vous lancez une NotImplementedException dans votre appel de méthode, c'est pourquoi le commentaire fonctionne:

public void Retrive()
{
    throw new NotImplementedException();
}

Au lieu de lancer, vous voudrez peut-être implémenter la logique de la méthode.

4
Yuval Itzchakov

Commentaires la partie jette new NotImplementedException (); a bien fonctionné pour moiMaintenant, la méthode sera identique ci-dessous:

public void Retrive()
{
    //throw new NotImplementedException();
}
1
Anjan Kant