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.
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();
}
}
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 é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:
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.
Commentaires la partie jette new NotImplementedException (); a bien fonctionné pour moiMaintenant, la méthode sera identique ci-dessous:
public void Retrive()
{
//throw new NotImplementedException();
}