该方法或操作未实现

时间:2016-01-02 15:42:46

标签: c# .net winforms inheritance windows-forms-designer

有两种形式。 Form2 源自 Form1

但我在设计模式中遇到 Form2 问题,如下面的屏幕截图所示。

如果我对此this._presenter.Retrive();发表评论,它会正常运作。是怎么回事?如何解决问题?

UPD: 如果我将删除throw new NotImplementedException();并将插入,例如,MessageBox.Show(" Test");,每次打开Form2时,MessageBox都会显示为运行应用程序。

enter image description here

窗体2

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

Form1中

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();
    }
}

3 个答案:

答案 0 :(得分:11)

错误的主要原因是FᴀʀʜᴀɴYuval所说的:

throw new NotImplementedException();

但是还有一件重要的事情你应该注意。

  

OP:如果我将删除throw new NotImplementedException();还会   插入,例如,MessageBox.Show(" Test");,每次我打开   Form2 MessageBox将显示为运行应用程序

如果您发现,则Form1的设计者不会收到此错误。但是因为Form2继承自Form1,您会收到此错误。

这是因为,当您在设计器中打开表单时,设计人员会为您的表单创建一个基类的实例来显示您的表单。它意味着不是创建Form2的实例,而是创建Form1的实例,运行Form1构造函数并将其托管在设计图面中,然后反序列化InitializeComponent中的代码Form2的{​​{1}}并将组件放在设计图面上。

这就是您在设计师中看到Form2时收到错误的原因,但在设计师中打开Form1时没有收到任何错误。

解决问题:

  • 您可以删除该实现,并让实现为空。
  • 此外,您可以使用Form_Load中的DesignMode属性阻止在Form1_Load fd处于设计模式下运行代码,以防止出现此错误:

    if(DesignMode)     返回;

您可能会发现这些答案有用且有趣:

答案 1 :(得分:4)

  

是怎么回事以及如何解决这个问题?

这是相当微不足道的。如果你要调试你的代码,你会发现你在方法调用中抛出NotImplementedException,这就是为什么评论出来的原因:

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

也许你想要实现实际的方法逻辑而不是抛出。

答案 2 :(得分:1)

评论 抛出新内容 NotImplementedException(); 对我来说运作正常 现在,最后的方法将类似于:

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