Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未实现该方法或操作_C#_.net_Winforms_Inheritance_Windows Forms Designer - Fatal编程技术网

C# 未实现该方法或操作

C# 未实现该方法或操作,c#,.net,winforms,inheritance,windows-forms-designer,C#,.net,Winforms,Inheritance,Windows Forms Designer,有两种形式Form2源自Form1 但是我在设计模式下遇到了一个问题,如下面的屏幕截图所示 如果我要对这个这个进行评论它可以正常工作。发生了什么事?如何解决这个问题 UPD: 如果我将删除throw new NotImplementedException();并将插入,例如MessageBox.Show(“Test”);,每次我打开Form2时,MessageBox都会出现,就好像我在运行应用程序一样 表格2 namespace InheritanceDemo { public par

有两种形式Form2源自Form1

但是我在设计模式下遇到了一个问题,如下面的屏幕截图所示

如果我要对这个
这个进行评论它可以正常工作。发生了什么事?如何解决这个问题

UPD: 如果我将删除throw new NotImplementedException();并将插入,例如MessageBox.Show(“Test”);,每次我打开Form2时,MessageBox都会出现,就好像我在运行应用程序一样

表格2

namespace InheritanceDemo
{
    public partial class Form2 : Form1
    {
        public Form2()
        {
            InitializeComponent();
        }
    }
}
表格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();
    }
}
发生了什么事?如何解决这个问题

这相当微不足道。如果你想调试你的代码,你会看到你在方法调用中抛出了一个
NotImplementedException
,这就是为什么注释它是有效的:

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

与其抛出,不如实现实际的方法逻辑。

错误的主要原因是和所说的:

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

OP:如果我将删除throw new NotImplementedException();威尔 例如,插入MessageBox.Show(“测试”);,每次我都会打开 Form2消息框将显示为我运行应用程序

如果您注意到,您将不会在
Form1
的设计器中收到此错误。但是,由于您的
Form2
继承自
Form1
,因此您会收到此错误

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

这就是为什么在designer中看到
Form2
时会收到错误,但在designer中打开
Form1
时没有收到任何错误

要解决这个问题:


  • 您可以删除该实现,并让该实现为空
  • 此外,您还可以通过在
    Form\u Load
    fd中防止运行代码来防止错误,您在
    Form1\u Load
    中使用属性处于设计模式:

    if(设计模式) 返回

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


  • 注释掉部分抛出新的未实现异常()对我来说很好 现在,最后一种方法将类似于以下内容:

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

    而不是
    抛出新的NotImplementedException()执行其他操作…:)@FᴀʀʜᴀɴAɴᴀᴍ 如果我将删除
    抛出新的NotImplementedException()并将插入,例如,
    MessageBox.Show(“测试”)
    ,每次我打开Form2时,
    消息框
    就会出现,就好像我在运行应用程序一样。不仅仅是MessageBox之类的东西。@FᴀʀʜᴀɴAɴᴀᴍ 我明白了。但为什么会有这样的行为呢?你会发现和张贴有用和有趣的帖子@FᴀʀʜᴀɴAɴᴀᴍ 很抱歉名称拼写错误:)但是如果我的
    DoSometning()
    方法现在无法正常工作,该怎么办?您希望得到什么结果?我想完成应用程序框架,然后进行设计,然后编写实现。您可以删除实现,让实现为空。此外,您还可以通过防止在设计模式下以
    Form\u Load
    id运行代码来防止错误。
    public void Retrive()
    {
        //throw new NotImplementedException();
    }